2017-08-27 63 views
1

1.i创建了CAshapelayer,并且还在CAshapelayer中插入了一个成功的标签,但现在我试图在图层中设置图像,但它不起作用。无法为半成形图层设置图像

  1. 帮助我放大此图层的动画。

     CAShapeLayer *circleLayer = [CAShapeLayer layer]; 
    [circleLayer setPath:[[UIBezierPath bezierPathWithOvalInRect:CGRectMake(50, 250, 100, 100)] CGPath]]; 
    circleLayer.contents = (id)[[UIImage imageNamed:@"001-forward.png"] CGImage]; 
    circleLayer.contentsGravity=kCAGravityResize; 
        // circleLayer.masksToBounds = YES; 
    [circleLayer setStrokeColor:[[UIColor brownColor] CGColor]]; 
    [circleLayer setFillColor:[[UIColor clearColor] CGColor]]; 
    
    [[self.view layer] addSublayer:circleLayer]; 
    CATextLayer *label = [[CATextLayer alloc] init]; 
    [label setFont:@"Helvetica-Bold"]; 
    [label setFontSize:15]; 
    [label setFrame:CGRectMake(50,300, 100, 50)]; 
    [label setString:@"GM"]; 
    [label setAlignmentMode:kCAAlignmentCenter]; 
    [label setForegroundColor:[[UIColor greenColor] CGColor]]; 
    
    [circleLayer addSublayer:label]; 
    
+1

从图像名称中删除.png,然后尝试代码,看它是否设置图像? – 3stud1ant3

+0

你放大动画的意思,你可以发布一个gif或我们可以看到的东西吗? –

+0

@ 3stud1ant3没有任何变化 – Abhiram

回答

1

主要的问题在这里是你不容添加UIImage作为内容CAShape Layer,因为你可以在这里看到UIImage as CAShapeLayer contents所以我修改了你的代码添加到图像和CALayer加那层您circleLayer

CGRect frame = CGRectMake(50, 250, 100, 100); 
// Do any additional setup after loading the view, typically from a nib. 
CAShapeLayer *circleLayer = [CAShapeLayer layer]; 
[circleLayer setPath:[[UIBezierPath bezierPathWithOvalInRect:frame] CGPath]]; 
circleLayer.contentsGravity=kCAGravityResize; 
// circleLayer.masksToBounds = YES; 
[circleLayer setStrokeColor:[[UIColor brownColor] CGColor]]; 
//[circleLayer setFillColor:[[UIColor clearColor] CGColor]]; 

[[self.view layer] addSublayer:circleLayer]; 
CATextLayer *label = [[CATextLayer alloc] init]; 
[label setFont:@"Helvetica-Bold"]; 
[label setFontSize:15]; 
[label setFrame:CGRectMake(50,300, 100, 50)]; 
[label setString:@"GM"]; 
[label setAlignmentMode:kCAAlignmentCenter]; 
[label setForegroundColor:[[UIColor greenColor] CGColor]]; 

CALayer * imageLayer = [CALayer layer]; 
[imageLayer setContents: (__bridge id _Nullable)([[UIImage imageNamed:@"test"] CGImage])]; 
imageLayer.frame = frame; // Define a frame 
imageLayer.contentsGravity=kCAGravityResize; 

CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
[maskLayer setPath:[[UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, frame.size.width, frame.size.height)] CGPath]]; 
imageLayer.mask = maskLayer; 

[circleLayer addSublayer:imageLayer]; 
[circleLayer addSublayer:label]; 

enter image description here

+0

谢谢你的工作正常我需要使这个circlelayer放大动画 – Abhiram

0

试试这个

CAShapeLayer *circleLayer = [CAShapeLayer layer]; 
[circleLayer setPath:[[UIBezierPath bezierPathWithOvalInRect:CGRectMake(50, 250, 100, 100)] CGPath]]; 
circleLayer.bounds = [[UIBezierPath bezierPathWithOvalInRect:CGRectMake(50, 250, 100, 100)] bounds]; 
circleLayer.masksToBounds = YES; 
[circleLayer setStrokeColor:[[UIColor brownColor] CGColor]]; 
//Use .png if you store your image outside of .xcassets 
circleLayer.fillColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"001-forward.png"]].CGColor; 

[[self.view layer] addSublayer:circleLayer];