克日,发现安卓同砚在项目中利用的都是SVG(矢量图)的图片。
那么,什么是svg呢?svg在放大大概缩小的环境下,图像的图形质量不会有所丧失,而且要比png,jpeg小很多。
但是有个标题是安卓那里是可以直接利用svg图片的,iOS这边则须要先导入svg库,才华利用。
pod "SVGKit"
终端报错,提示Could not resolve proxy: “”
报错缘故起因是协议
终端输入:vim ~/.gitconfig,打开设置文件,删除全部协议
重新pod install,导入乐成,但编译项目,报错Module 'CocoaLumberjack' not found
由于SVGkit须要依赖CocoaLumberjack第三方,但在cocopods导入时,已经默认一起导入。
寻求其他办理方法:
pod 'SVGKit', :git => 'https://github.com/SVGKit/SVGKit.git', :branch => '2.x'
pod 'CocoaLumberjack'
以这种情势导入编译就不报错了。
引入头文件
#import "SVGKit.h"
#import "SVGKImage.h"
#import "SVGKParser.h"
#import "UIImage+SVG.h"(这个是本身封装的svg分类)
接下来就是展示svg分类文件代码的时候
.h文件
/** show svg image
@param name svg name
@return svg image
*/
+ (UIImage*)br_svgImageNamedNSString*)name;
/**
show svg image
@param name svg name
@param size image size
@return svg image
*/
+ (UIImage*)br_svgImageNamedNSString*)namesizeCGSize)size;
/**
show svg image
@param name svg name
@param size image size
@param tintColor image color
@return svg image
*/
+ (UIImage*)br_svgImageNamedNSString*)namesizeCGSize)sizetintColorUIColor*)tintColor;
.m文件
/**
show svg image
@param name svg name
@return svg image
*/
+ (UIImage*)br_svgImageNamedNSString*)name {
SVGKImage*svgImage = [SVGKImageimageNamed:name];
returnsvgImage.UIImage;
}
/**
show svg image
@param name svg name
@param size image size
@return svg image
*/
+ (UIImage*)br_svgImageNamedNSString*)namesizeCGSize)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_svgImageNamedNSString*)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;
}
调用
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];
有个标题须要留意的是,假如用iOS原生uiimage赋值图片,假如图片被删,那么顶多是这个图片展示不出来,但假如换用svg格式,找不到图片会crash |