一 简介
1,CAShapeLayer继承至CALayer,可以使用CALayer的所有属性
2,CAShapeLayer需要与贝塞尔曲线配合使用才有意义;单独使用毫无意义
3,使用CAShapeLayer与贝塞尔可以实现不在view的drawRect方法中画出一些想要的图形;
4,CAShapeLayer属于Core Animation框架,其动画渲染直接提交到手机的GPU当中,相较于view的drawRect方法使用CPU渲染而言,其效率极高,
能大大优化内存使用情况。
drawRect 属于Core Graphics 框架,走CPU,耗性能较大。
5,示例:
// 创建shapeLayer _shapeLayer = [CAShapeLayer layer]; _shapeLayer.frame = (CGRect){CGPointMake(0, 0), CGSizeMake(200, 200)}; _shapeLayer.position = self.view.center; _shapeLayer.path = [self getStar1BezierPath].CGPath; //从贝塞尔曲线中获取path _shapeLayer.fillColor = [UIColor clearColor].CGColor; //填充色 _shapeLayer.strokeColor = [UIColor redColor].CGColor; //路径-线颜色 _shapeLayer.lineWidth = 2.f; //stroker宽度 [self.view.layer addSublayer:_shapeLayer];
二贝赛尔曲线与CAShapeLayer的关系
1,CAShapeLayer,含shape,顾名思义,它需要一个形状才能生效;
2,贝塞尔曲线可以创建基于矢量的路径
3,贝塞尔曲线给CAShapeLayer提供路径,CAShapeLayer在提供的路径中进行渲染,路径会闭环,所以路径绘制出了shape。
4,用于CAShapeLayer的贝塞尔曲线作为path,其path是一个首尾相接的闭环的曲线,即使该贝塞尔曲线不是一个闭环的曲线。
shape.masksToBounds = YES ; //禁止内容显示超出CAShapeLayer的frame值。
贝塞尔曲线的frame值与CAShapeLayer的frame值互不干扰,CAShaperLayer的frame值不能小于贝塞尔曲线的frame值。
三strokeStart与strokeEnd动画
1,将shapeLayer的fillColor设置为透明背景
2,设置线条的宽度(lineWidth)的值
3,设置线条的颜色
4,将strokeStart值设定为0,然后让stokeEnd的值变化触发隐式动画
四 用CAShaperLayer实现圆形进度条效果