UIView & CALayer 的区别与联系
2021-12-05 本文已影响0人
BabyNeedCare
UIView & UILayer 的区别与联系
UIView:
UIView 是 iOS 系统中界面元素的基础,所有的界面元素都继承自它;
它本身完全是由 CoreAnimation 来实现的;
它真正的绘图部分,是由一个叫 CALayer(CoreAnimation Layer)的类来管理;
UIView 本身更像是一个 CALayer 的管理器,访问它的根绘图和根坐标有关的属性,例如 frame,bounds 等等, 实际上内部都是在访问它所包含的 CALayer 的相关属性;
UIView 有个重要属性 layer,可以返回它的主 CALayer 实例。
CALayer:
CALayer 类似 UIView 的子 View 树形结构,也可以向它的 layer 上添加子 layer,来完成某些特殊的表示(即 CALayer 层是可以嵌套的);
UIView 的 layer 树形在系统内部分别是:
1.逻辑树,这里是代码可以操纵的;
2.动画树,是一个中间层,系统就在这一层上更改属性,进行各种渲染操作;
3.显示树,其内容就是当前正被显示在屏幕上得内容。
动画的运作:对 UIView 的 subLayer(非主 Layer)属性进行更改,系统将自动进行动画生成,动画持续时间的缺省值似乎是 0.5 秒。
坐标系统:CALayer 的坐标系统比 UIView 多了一个 anchorPoint 属性,使用 CGPoint 结构表示,值域是 0~1,是个比例值。
渲染:当更新层,改变不能立即显示在屏幕上。当所有的层都准备好时,可以调用 setNeedsDisplay 方法来重绘显示。
变换:要在一个层中添加一个 3D 或仿射变换,可以分别设置层的 transform 或 affineTransform 属性。
变形:Quartz Core 的渲染能力,使二维图像可以被自由操纵,就好像是三维的。图像可以在一个三维坐标系中以任意角度被旋转,缩放和倾斜。CATransform3D 的一套方法提供了一些魔术般的变换效果。