近日,發(fā)現(xiàn)安卓同學(xué)在項(xiàng)目中使用的都是SVG(矢量圖)的圖片。
那么,什么是svg呢?svg在放大或者縮小的情況下,圖像的圖形質(zhì)量不會(huì)有所損失,而且要比png,jpeg小很多。
但是有個(gè)問題是安卓那邊是可以直接使用svg圖片的,iOS這邊則需要先導(dǎo)入svg庫(kù),才能使用。
pod "SVGKit"
終端報(bào)錯(cuò),提示Could not resolve proxy: “”
報(bào)錯(cuò)原因是協(xié)議
終端輸入:vim?~/.gitconfig,打開配置文件,刪除所有協(xié)議
重新pod install,導(dǎo)入成功,但編譯項(xiàng)目,報(bào)錯(cuò)Module 'CocoaLumberjack' not found
因?yàn)镾VGkit需要依賴CocoaLumberjack第三方,但在cocopods導(dǎo)入時(shí),已經(jīng)默認(rèn)一起導(dǎo)入。
尋求其他解決方法:
pod 'SVGKit', :git => 'https://github.com/SVGKit/SVGKit.git', :branch => '2.x'
pod 'CocoaLumberjack'
以這種形式導(dǎo)入編譯就不報(bào)錯(cuò)了。
引入頭文件
#import "SVGKit.h"
#import "SVGKImage.h"
#import "SVGKParser.h"
#import "UIImage+SVG.h"(這個(gè)是自己封裝的svg分類)
接下來就是展示svg分類文件代碼的時(shí)刻
.h文件
/**?show svg image
?@param name svg name
?@return svg image
?*/
+ (UIImage*)br_svgImageNamed:(NSString*)name;
/**
?show svg image
?@param name svg name
?@param size image size
?@return svg image
?*/
+ (UIImage*)br_svgImageNamed:(NSString*)namesize:(CGSize)size;
/**
?show svg image
?@param name? ? ? svg name
?@param size? ? ? image size
?@param tintColor? image color
?@return svg image
?*/
+ (UIImage*)br_svgImageNamed:(NSString*)namesize:(CGSize)sizetintColor:(UIColor*)tintColor;
.m文件
/**
?show svg image
?@param name svg name
?@return svg image
?*/
+ (UIImage*)br_svgImageNamed:(NSString*)name {
? ? SVGKImage*svgImage = [SVGKImageimageNamed:name];
? ? returnsvgImage.UIImage;
}
/**
?show svg image
?@param name svg name
?@param size image size
?@return svg image
?*/
+ (UIImage*)br_svgImageNamed:(NSString*)namesize:(CGSize)size {
? ? SVGKImage*svgImage = [SVGKImageimageNamed:name];
? ? svgImage.size= size;
? ? returnsvgImage.UIImage;
}
/**
?show svg image
?@param name? ? ? svg name
?@param size? ? ? image size
?@param tintColor? image color
?@return svg image
?*/
+ (UIImage*)br_svgImageNamed:(NSString*)namesize:(CGSize)sizetintColor:(UIColor*)tintColor {
? ? SVGKImage*svgImage = [SVGKImageimageNamed:name];
? ? svgImage.size= size;
? ? CGRectrect =CGRectMake(0,0, svgImage.size.width, svgImage.size.height);
? ? CGImageAlphaInfoalphaInfo =CGImageGetAlphaInfo(svgImage.UIImage.CGImage);
? ? BOOL opaque = alphaInfo == kCGImageAlphaNoneSkipLast || alphaInfo == kCGImageAlphaNoneSkipFirst || alphaInfo == kCGImageAlphaNone;
? ? UIGraphicsBeginImageContextWithOptions(svgImage.size, opaque, svgImage.scale);
? ? CGContextRef context = UIGraphicsGetCurrentContext();
? ? CGContextTranslateCTM(context,0, svgImage.size.height);
? ? CGContextScaleCTM(context,1.0, -1.0);
? ? CGContextSetBlendMode(context, kCGBlendModeNormal);
? ? CGContextClipToMask(context, rect, svgImage.UIImage.CGImage);
? ? CGContextSetFillColorWithColor(context, tintColor.CGColor);
? ? CGContextFillRect(context, rect);
? ? UIImage *imageOut = UIGraphicsGetImageFromCurrentImageContext();
? ? UIGraphicsEndImageContext();
? ? returnimageOut;
}
調(diào)用
?UIImage*image = [UIImage br_svgImageNamed:@"圖片"];
UIImage*image2=[UIImage br_svgImageNamed:@"icon_back.svg"size:CGSizeMake(12.0,24.0)];
UIImage*image3=[UIImage br_svgImageNamed:@"icon_back.svg"size:CGSizeMake(12.0,24.0)tintColor:[UIColor whiteColor]];
(不需要.svg后綴)
或者
//? ? ? ? SVGKImage *svgImage = [SVGKImage imageNamed:@"playedBtnImg-1.svg"];
//? ? ? ? self.playedBtnImg = [[SVGKLayeredImageView alloc] initWithSVGKImage:svgImage];
//? ? ? ? [self.playedView addSubview:self.playedBtnImg];
有個(gè)問題需要注意的是,如果用iOS原生uiimage賦值圖片,如果圖片被刪,那么頂多是這個(gè)圖片展示不出來,但如果換用svg格式,找不到圖片會(huì)crash