2015-06-25 7 views
0

способ применения SVGKImage изменение SVG fill цвет?как использовать 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 имеет информацию UIBezierPath в test.svg, поэтому вы можете с ней что-либо делать.

ответ

1

Вы должны использовать 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

1

Я знаю, что метод, который может изменить цвет на UIImage. Итак, сначала мы должны получить UIImage от SVGKImage.

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; 
} 

OK. этот метод может помочь нам изменить цвет изображения. В основном используют некоторые API в CoreGraphics. И я предлагаю вам создать категорию с UIImage, она будет удобна в использовании.

1

Теперь вы можете изменить цвет самого изображения png.

Objective 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) 

ура !!!