一,UIView的显示原理
- 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层;
- 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示
二,苹果设置CALayer的目的
- 职责分明,代码清晰:UIView负责事件,CALayer负责展示
- 减少代码:在iOS和Mac OS两个平台上,事件和用户交互有很多地方的不同,iOS有UIKit和
UIView
,但是Mac OS有AppKit和NSView,而
绘图,布局和动画抽象成Core Animation框架公用
三,CALayer和UIView的区别
1,功能区别:
- UIView可以处理事件,CALayer不能处理事件,只负责展示;
- CALayer的功能:
- 阴影,圆角,带颜色的边框
- 3D变换
- 非矩形范围
- 透明遮罩
- 多级非线性动画
2,依赖关系:
- UIView的drawRect依赖CALayer传递过来的上下文才能执行,CALayer绘制并不依赖UIView,依赖UIView进行展示
- UIView的frame、bounds、center基础属性都获取于view.layer的基础属性,setter方法也会调用view.layer的setter方法
3,属性使用:
- CALayer只能使用CGImageRef和CGColorRef,UIView使用UIImage和UIColor;因为CALayer在QuartzCore框架,框架是跨平台;而UIView在UIKit框架,不跨平台,只适用于iOS;
- CALayer的position类似于UIView的center(相对于父类坐标)而CALayer的anchorPoint属性相对于自己的坐标:默认{0.5,0.5},UIVIew则无
4,动画特性
- 在做 iOS 动画的时候,修改非 RootLayer的属性,会默认产生隐式动画,而修改UIView则不会;
- 给图层添加动画,来实现一些比较炫酷的效果;
- CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级;