Reputation: 247
1.i have created CAshapelayer and also inserted one lable sucessfully in CAshapelayer,but now i'm trying to set image in layer but it was not working.
help me to make Zoom in animation for this layer.
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];
Upvotes: 1
Views: 87
Reputation: 4457
Try this
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];
Upvotes: 0
Reputation: 20804
The main issue here is that you can´t add an UIImage
as content for CAShape Layer
,as you can see here UIImage as CAShapeLayer contents so I had modified your code adding the Image into CALayer
and adding that layer to your 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];
Upvotes: 1