美文网首页
iOS CAShapeLayer

iOS CAShapeLayer

作者: 夏天爱西瓜汁 | 来源:发表于2017-11-28 11:22 被阅读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的圆

    相关文章

      网友评论

          本文标题:iOS CAShapeLayer

          本文链接:https://www.haomeiwen.com/subject/arrdbxtx.html