iOS CAShapeLayer

2017-11-28  本文已影响31人  夏天爱西瓜汁

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的圆

上一篇下一篇

猜你喜欢

热点阅读