CALayer
CALayer继承自NSObject 遵守协议NSCoding、CAMediaTiming。属于QuartzCore框架。iOS 2.0后可用。
1.CALayer类用于管理基于图像的内容,可以这些内容上进行动画。layer通常用于提供视图的后台存储,但也可以不使用视图只适用图层来显示内容。layer的主要功能是管理你提供的视图内容,但它本身也有一些视觉属性可供设置,比如背景色、边框、阴影。除了管理视图内容,layer同时也包含了一些自身内容相关的几何信息,比如position/size/transform,这些用于使内容显示在屏幕上。可以修改layer的属性来初始化图层上的内容或几何动画。一个layer对象封装了时长和频率,它遵守CAMediaTiming协议,这个协议定义了layer的定时信息。
如果一个layer对象是在创建view的时候创建的,那么这个view一般情况下默认是这个layer的代理,而且不能改变这一关系。如果是手动创建的layer,你可以指定一个代理对象,再用这个代理动态地显示该layer的内容并执行其他代理方法。一个layer也有一个布局管理对象(layout manager object)来逐一管理layer子视图的布局
每个 UIView 内部都有一个 CALayer 来提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提供。两者都有树状层级结构,layer 内部有 SubLayers,View 内部有 SubViews.但是 Layer 比 View 多了个AnchorPoint
在 View显示的时候,UIView 做为 Layer 的 CALayerDelegate,View 的显示内容由内部的 CALayer 的 display
CALayer 是默认修改属性支持隐式动画的,在给 UIView 的 Layer 做动画的时候,View 作为 Layer 的代理,Layer 通过 actionForLayer:forKey:向 View请求相应的 action(动画行为)
layer 内部维护着三分 layer tree,分别是 presentLayer Tree(动画树),modeLayer Tree(模型树), Render Tree (渲染树),在做 iOS动画的时候,我们修改动画的属性,在动画的其实是 Layer 的 presentLayer的属性值,而最终展示在界面上的其实是提供 View的modelLayer
两者最明显的区别是 View可以接受并处理事件,而 Layer 不可以