UIImageView添加SVG格式的图片
程序员文章站
2022-05-14 17:53:49
...
pod 导入
pod 'SVGKit'
pod 'CocoaLumberjack'
创建UIImage的分类
.h 文件中
/**
@param name svg name xxx.svg
@param size image size
@return svg image
*/
+(UIImage *)svgImgNamed:(NSString *)name size:(CGSize)size;
.m
#import "UIImage+SVGTool.h"
#import <SVGKImage.h>
@implementation UIImage (SVGTool)
/**
@param name svg name-->xxx.svg
@param size image size
@return svg image
*/
+(UIImage *)svgImgNamed:(NSString *)name size:(CGSize)size{
SVGKImage *svgImg = [SVGKImage imageNamed:name];
svgImg.size = size;
return svgImg.UIImage;
}
@end
引用
UIImage *image = [UIImage svgImgNamed:@"icon_light.svg" size:CGSizeMake(80,80)];
这样写的话太局限了,如果需求这样的图片一个其他颜色的还是重新写一个 是不是太麻烦了还浪费资源 不如换个方式呈现吧
.h
/**
@param name svg name -->xxx.svg
@param size image size
@param color image color
@return svg image
*/
+ (UIImage *)svgImageNamed:(NSString *)name size:(CGSize)size imageColor:(UIColor *)color;
.m
/**
@param name svg name -->xxx.svg
@param size image size
@param color image color
@return svg image
*/
+ (UIImage *)svgImageNamed:(NSString *)name size:(CGSize)size imageColor:(UIColor *)color {
SVGKImage *svgImage = [SVGKImage imageNamed:name];
svgImage.size = size;
CGRect rect = CGRectMake(0, 0, svgImage.size.width, svgImage.size.height);
CGImageAlphaInfo alphaInfo = 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, color.CGColor);
CGContextFillRect(context, rect);
UIImage *imageOut = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return imageOut;
}
引用
UIImage *image = [UIImage svgImageNamed:@"icon_light.svg" size:CGSizeMake(80,80) imageColor:[UIColor greenColor]];
这样的话是不是方便多了 想要什么颜色的直接加个颜色就可以啦
注意事项:
1.调用以上代码真机运行也许SVGKit 中会错
例如:
找到 SVGLength.m文件中的+(float) pixelsPerInchForCurrentDevice{}方法 添加手机的型号 例如iPhone6 iPhone7
2.还有一些宏会报错 直接注释调就可以了(DDLogCWarn ... 等)
上一篇: Android 进阶之事件分发机制