【iOS】加载SVG图片

2021-08-05  本文已影响0人  irenb

一、导入 SVGKit 第三方库

# SVG 图片展示
pod 'SVGKit'

二、使用 SVGKit 库

/// UIImage+SVG.h
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UIImage (SVG)
/**
 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 *)name size:(CGSize)size;

/**
 show svg image
 @param name       svg name
 @param size       image size
 @param tintColor  image color
 @return svg image
 */
+ (UIImage *)br_svgImageNamed:(NSString *)name size:(CGSize)size tintColor:(UIColor *)tintColor;

@end

NS_ASSUME_NONNULL_END
/// UIImage+SVG.m
#import "UIImage+SVG.h"
#import <SVGKit/SVGKImage.h>

@implementation UIImage (SVG)

/**
 show svg image
 
 @param name svg name
 @return svg image
 */
+ (UIImage *)br_svgImageNamed:(NSString *)name {
    SVGKImage *svgImage = [SVGKImage imageNamed:name];
    return svgImage.UIImage;
}

/**
 show svg image
 
 @param name svg name
 @param size image size
 @return svg image
 */
+ (UIImage *)br_svgImageNamed:(NSString *)name size:(CGSize)size {
    SVGKImage *svgImage = [SVGKImage imageNamed:name];
    svgImage.size = size;
    return svgImage.UIImage;
}

/**
 show svg image
 
 @param name       svg name
 @param size       image size
 @param tintColor  image color
 @return svg image
 */
+ (UIImage *)br_svgImageNamed:(NSString *)name size:(CGSize)size tintColor:(UIColor *)tintColor {
    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, tintColor.CGColor);
    CGContextFillRect(context, rect);
    UIImage *imageOut = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return imageOut;
}

@end
UIImage *image1 = [UIImage br_svgImageNamed:@"icon_back.svg"];
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]];
上一篇下一篇

猜你喜欢

热点阅读