认识CALayer和UIView
1.UIView继承UIResponde,可以响应事件。 UIResponder中定义了处理各种事件和事件传递的接口,直接间接继承UIResponder类还有:UIApplication、UIViewController、UIView、和所有从UIView派生出来的UIKit类包括UIWindow。
CALayer直接继承NSObject,不可以响应事件。
2.CoreAnimation
![](https://img.haomeiwen.com/i5977864/2c4056fc2d11192e.png)
CoreAnimation是对上层的封装,介于UIKit与CoreGraphics(绘图)、OpenGL/OpenGL ES(渲染管线)之间。最底下还有一个Graphics Hardware,就是硬件。
3.Window与Layer之间的关系
![](https://img.haomeiwen.com/i5977864/42a8f1b63de0389f.png)
此图告诉我们,层是基于绘画模型实现的,层不会在app中做什么,只是捕获app所提供的内容,并缓存成bitmap(位图文件),当任何与层关联的属性值发生时,CoreAnimation就会将新的bitmap传给绘图硬件,并根据新的位图更新显示。
UIView完全是由CoreAnimation来实现的,绘图部分由一个CALayer类来管理,例如:frame,bounds等,实际上内部都是在访问它所包含的CALayer的相关属性。
提示:layer-base drawing 不同于 view-base drawing ,后者的性能消耗是很高的,它是在主线程上直接通过CPU完成,而且通常在-drawRect:中绘制动画。
4.UIView和CALayer的联系
UIview默认包含一个layer属性,而layer是可以包含很多个sublayer的,UIView就像一个画板,而layer就像画布,一个画板上可以有很多块画布,画布不能有画板
UIView负责管理内容 CALayer负责渲染和呈现
CALayer维护着三个layer tree : presentLayer Tree(呈现树)、modeLayer Tree、render Tree(渲染树)。
在做动画时,修改动画的属性就是修改的是presentLayer属性值,展示在界面就是提供UIView的modelLayer。