如何使用SVGKImage更改SVG填充颜色?

如何使用SVGKImage更改SVG填充颜色?

SVGKImage *svgImage = [SVGKImage imageNamed:@"card.svg"]; svgImage.size = self.bounds.size; SVGKLayeredImageView *imageLayer = [[SVGKLayeredImageView alloc] initWithSVGKImage:svgImage]; SVGKLayer *layer = (SVGKLayer *)imageLayer.layer; self.layer.mask = layer; 

在这里,我找到了一种获取CAShapeLayer的简便方法

SVGKImage * svgImage = [SVGKImage imageNamed:@“test.svg”]; CAShapeLayer * thisLayer = svgImage.CALayerTree; // thisLayer在test.svg中有UIBezierPath信息,所以你可以用它做任何事情。

您必须使用CALayer子图层来更改颜色:

 SVGKImage *svgImage = [SVGKImage imageNamed:@"Anchor.svg"]; SVGKLayeredImageView *svgImageView = [[SVGKLayeredImageView alloc] initWithSVGKImage:svgImage]; [capturedImageView addSubview:svgImageView]; CALayer* layer = svgImageView.layer; for (CALayer *subLayer in layer.sublayers) { DLog(@"%@", [subLayer class]); for (CALayer *subSubLayer in subLayer.sublayers) { DLog(@"%@", [subSubLayer class]); for (CALayer *subSubSubLayer in subSubLayer.sublayers) { DLog(@"%@", [subSubSubLayer class]); if( [subSubSubLayer isKindOfClass:[CAShapeLayer class]]){ CAShapeLayer* shapeLayer = (CAShapeLayer*)subSubSubLayer; shapeLayer.fillColor = [UIColor redColor].CGColor; } } } } 

希望这可以帮助。

资料来源: https : //github.com/SVGKit/SVGKit/issues/98

我知道一种可以改变UIImage颜色的方法。 所以,我们应该首先从SVGKImage获取UIImage。

 UIImage *img = [SVGKImage imageNamed:@"imageName"].UIImage; 

然后,我们可以定义一个这样的方法:

 - (UIImage *)changeTintColorWithImage:(UIImage *)img color:(UIColor *)tintColor { UIImage *imageIn = img; CGRect rect = CGRectMake(0, 0, imageIn.size.width, imageIn.size.height); CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageIn.CGImage); BOOL opaque = alphaInfo == kCGImageAlphaNoneSkipLast || alphaInfo == kCGImageAlphaNoneSkipFirst || alphaInfo == kCGImageAlphaNone; UIGraphicsBeginImageContextWithOptions(imageIn.size, opaque, imageIn.scale); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(context, 0, imageIn.size.height); CGContextScaleCTM(context, 1.0, -1.0); CGContextSetBlendMode(context, kCGBlendModeNormal); CGContextClipToMask(context, rect, imageIn.CGImage); CGContextSetFillColorWithColor(context, tintColor.CGColor); CGContextFillRect(context, rect); UIImage *imageOut = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return imageOut; } 

好。 这种方法可以帮助我们改变图像的颜色。它主要使用CoreGraphics中的一些API。 我建议您可以使用UIImage创建一个类别,使用起来会很方便。

现在您可以更改png图像本身的颜色。

目标C:

  UIImage *img = [UIImage imageNamed:@"imagename"]; UIImage *tintedImage = [img imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; UIImageView *imgVw = [[UIImageView alloc] initWithImage:tintedImage]; imgVw.frame = CGRectMake(0, 20, 100, 100); imgVw.tintColor = [UIColor greenColor]; [self.view addSubview:imgVw]; 

迅速:

 let img = UIImage(named: "imagename") let tintedImage: UIImage? = img?.withRenderingMode(.alwaysTemplate) let imgVw = UIImageView(image: tintedImage) imgVw.frame = CGRect(x: 0, y: 20, width: 100, height: 100) imgVw.tintColor = UIColor.green view.addSubview(imgVw) 

干杯!!!