认识CALayer和UIView

1.UIView继承UIResponde,可以响应事件。                                                    UIResponder中定义了处理各种事件和事件传递的接口,直接间接继承UIResponder类还有:UIApplication、UIViewController、UIView、和所有从UIView派生出来的UIKit类包括UIWindow。

CALayer直接继承NSObject,不可以响应事件。

2.CoreAnimation

认识CALayer和UIView_第1张图片

CoreAnimation是对上层的封装,介于UIKit与CoreGraphics(绘图)、OpenGL/OpenGL  ES(渲染管线)之间。最底下还有一个Graphics Hardware,就是硬件。

3.Window与Layer之间的关系


认识CALayer和UIView_第2张图片

此图告诉我们,层是基于绘画模型实现的,层不会在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。

你可能感兴趣的:(认识CALayer和UIView)