使用CALayer或者drawRect方法来绘制自定义View
2015-07-06 23:21
756 查看
如下图,使用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
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
相关文章推荐
- linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
- ARM指令集
- 【算法学习笔记】62.状态压缩 DP SJTU OJ 1088 邮递员小F
- Linux下C语言调试(3)
- hibernate初入门3--hibernate的简易实现
- 软件安装/程序编译过程
- 题目1195:最长&最短文本
- ice编译文件不能使用中文路径
- 一步步制作RPM包
- 2015070610 - 看到很多所谓的大牛
- hibernate初入门3--hibernate的简易实现
- 用来在category里加属性的宏
- Redhat Linux RPM包安装软件及其管理
- 配置apache 支持 php
- C#生成DLL文件的方法小结
- poj 2151 Check the difficulty of problems 概率dp
- 集合(1) list hash
- asp.net 学习之路之gridView控件之修改数据
- 哈夫曼树
- iOS中的模块化开发思路一