CoreAnimation----CAShapeLayer

大美女
先說說使用CAShapeLayer的優(yōu)點(diǎn): GPU執(zhí)行, GPU執(zhí)行, GPU執(zhí)行
CAShapeLayer
1. CAShapeLayer的優(yōu)點(diǎn)
- 渲染迅速,硬件加速GPU執(zhí)行 。
- 內(nèi)存利用率高,不需要寄宿圖,所以比CALayer的內(nèi)存占用還低。 。
- 圖層邊界不會(huì)被裁減掉,CAShapeLayer可在邊界外進(jìn)行繪制
- 不會(huì) 像素化
2. 使用CGPath
- CAShapeLayer可繪制所有通過CGPath表示的形狀
- 這個(gè)形狀不一定要閉合
- 可控制屬性如:lineWidth(線寬),lineCap(線條結(jié)尾的樣式),lineJoin(線條之間結(jié)合點(diǎn)的樣式)
使用CAShapeLayer畫“火柴人”:
- (void)viewDidLoad {
[super viewDidLoad];
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(175, 100)];
[path addArcWithCenter:CGPointMake(150, 100) radius:25 startAngle:0 endAngle:M_PI * 2 clockwise:YES];
[path moveToPoint:CGPointMake(150, 125)];
[path addLineToPoint:CGPointMake(150, 175)];
[path addLineToPoint:CGPointMake(125, 225)];
[path moveToPoint:CGPointMake(150, 175)];
[path addLineToPoint:CGPointMake(175, 225)];
[path moveToPoint:CGPointMake(100, 150)];
[path addLineToPoint:CGPointMake(200, 150)];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.strokeColor = [UIColor redColor].CGColor;
shapeLayer.fillColor = [UIColor clearColor].CGColor;
shapeLayer.lineWidth = 5.0f;
shapeLayer.lineJoin = @"round";
shapeLayer.lineCap = @"round";
shapeLayer.path = path.CGPath;
[self.view.layer addSublayer:shapeLayer];
NSLog(@"-------viewDidlod-------");
}
3. 圓角
- 除了設(shè)置CALayer的cornerRadius,還可以單獨(dú)設(shè)置一個(gè)角的圓角
設(shè)置矩形的三個(gè)角為圓角
- (void)viewDidLoad {
[super viewDidLoad];
CGRect tect = CGRectMake(50, 50, 100, 100);
CGSize radii = CGSizeMake(20, 20);
UIRectCorner corner = UIRectCornerTopRight | UIRectCornerBottomLeft | UIRectCornerBottomRight;
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:tect byRoundingCorners:corner cornerRadii:radii];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = path.CGPath;
[self.view.layer addSublayer:shapeLayer];
NSLog(@"-------viewDidlod-------");
}