欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

UIImageView添加SVG格式的图片

程序员文章站 2022-05-14 17:53:49
...

pod 导入

pod 'SVGKit'

pod 'CocoaLumberjack'

 

创建UIImage的分类

UIImageView添加SVG格式的图片

.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 中会错

例如:UIImageView添加SVG格式的图片

找到 SVGLength.m文件中的+(float) pixelsPerInchForCurrentDevice{}方法 添加手机的型号 例如iPhone6 iPhone7

2.还有一些宏会报错 直接注释调就可以了(DDLogCWarn ...  等)