2017-08-27 17 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];