iOS CAShapeLayer
2016.3.8
1,继承CALayer,可以使用CALayer的所有属性值
2,要与贝塞尔曲线配合使用才有意义
3,使用CAShapeLayer与贝塞尔曲线可以实现不在view的drawRect方法中划出一些想要的图形
4,CAShapeLayer属于CoreAnimation框架,其动画渲染直接提交到手机的GPU当中,相较于view的drawRect方法使用CPU渲染而言,其效率极高,能大大优化内存使用情况
贝塞尔曲线与CAShapeLayer的关系
1,CAShapeLayer中有shape,既它需要一个形状才能生效
2,贝塞尔曲线可以创建基于矢量的路径
3,贝塞尔曲线给CAShapeLayer提供路径,CAShapeLayer在提供的路径中进行渲染,路径会闭环,所以路径绘制出了shape
4,用于CAShapeLayer的贝塞尔曲线作为path,其path是一个首尾相接的闭环的曲线,即使该贝塞尔曲线不是一个闭环的曲线
贝塞尔曲线的frame和CAShapeLayer的frame互不干扰,但是CAShapeLayer的值 不能小于贝塞尔曲线
//创建椭圆形贝塞尔曲线
UIBezierPath*oval = [UIBezierPathbezierPathWithOvalInRect:CGRectMake(0,0,200,100)];
//矩形
UIBezierPath*rect = [UIBezierPathbezierPathWithRect:CGRectMake(0,0,200,100)];
//圆形
UIBezierPath*circle = [UIBezierPathbezierPathWithOvalInRect:CGRectMake(0,0,100,100)];
//创建CAShapeLayer
CAShapeLayer*shape = [CAShapeLayerlayer];
shape.frame=CGRectMake(0,0,200,100);
shape.position=self.center;
//显示CAShapeLayer的边界
shape.borderWidth = 1.f;
//禁止内容超出CAShapeLayer的frame值
shape.maskToBounds =YES;
//贝塞尔曲线的填充颜色
shape.fillColor= [[UIColorredColor]CGColor];
//建立贝塞尔曲线与CAShapeLayer之间的关联
shape.path= circle.CGPath;
//添加并显示
[self.layeraddSublayer:shape];
self.shapeLayer.strokeStart=0;//圆的起始点,为0显示一个完整的圆。0从钟表的3刻钟方向开始
self.shapeLayer.strokeEnd=0.75;//圆的终点,为0也显示完整的圆。顺时针方向,此时显示3/4的圆