使用CALayer或者drawRect方法来绘制自定义View

如下图,使用CALayer和drawRect两种方式创建两个完全一样的进度条(CALayer的进度条自动会有动画)。


3个按钮分别是减少值,改变颜色和增加值。

对于使用CALayer自定义控件的实现,一些外观方面的属性定义可以直接修改对应layer的属性,比如颜色。其次,属性变化需调用setNeedsLayout方法,而主要规划逻辑也定义在UIView的layoutSubviews方法中,通常是对CALayer位置(frame属性)的重新设置。

对于使用drawRect方法实现的自定义控件,则需要使用Quartz 2D中的函数来手动执行绘画。而任何属性变化则需要调用UIView的setNeedsDisplay方法从而重新间接调用drawRect方法来刷新控件(用户不可以直接调用drawRect方法来刷新控件)。

两种方法比较,使用CALayer实现相比使用drawRect方法通常更具优势,原因1:CALayer的属性变化默认会有动画。原因2:CALayer的属性变化本身就是实时的,所以有些操作可以不必要调用setNeedsLayout方法。而使用drawRect方法实现的话,唯一的刷新方法就是通过setNeedsDisplay方法来重新刷新下自己。因此,如果自定义控件可以使用CALayer实现,最好就用CALayer,如果不可以,则不得不使用drawRect来手动绘画了。

两种方法实现进度条的代码

网盘下载:http://pan.baidu.com/s/1mgwUUqW

另外,github上有一个使用CALayer来绘制曲线动画的例子,可以窥见CALayer实现是多么简单。

https://github.com/kevinzhow/PNChart

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 12,713评论 6 30
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 10,521评论 5 13
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,322评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,204评论 4 61
  • 日期:2017-07-03 地点:杭州
    BreezeNicole阅读 1,508评论 0 0