码迷,mamicode.com
首页 > 其他好文 > 详细

CAShapeLayer

时间:2015-05-27 22:33:47      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:

一 简介

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实现圆形进度条效果

CAShapeLayer

标签:

原文地址:http://www.cnblogs.com/developer-qin/p/4534422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!