UIView和CALayer

一、职责区别

UIView的职责

UIView是一个用于管理屏幕上矩形区域内容的对象。UIView是应用程序用户界面的基本构建块,UIView类定义了所有视图都通用的行为。视图对象在其边界矩形内呈现内容,并处理与该内容的任何交互。UIView类是一个具体的类,你可以实例化并使用它来显示固定的背景颜色。你还可以对它进行子类化,以绘制更复杂的内容。如果要显示标签、图像、按钮和其他应用程序中常见的界面元素,尽量使用UIKit框架提供的视图子类。UIView的作用总结如下:

绘图和动画
  • UIView使用UIKit或Core Graphics在其矩形区域绘制内容。
  • UIView可以通过动画方式将一些视图属性改变到新值。
布局和子视图管理
  • UIView可以包含零个或多个子视图。
  • UIView可以调整子视图的大小和位置。
  • UIView可以使用Auto Layout来定义调整视图大小和重新定位的规则,以响应视图层次结构中的更改。
响应用户事件
  • UIView是UIResponder的子类,可以响应触摸和其他类型的事件。
  • UIView可以添加手势识别器来处理常见的手势。

CALayer

CALayer主要是负责渲染和动画。CALayer是管理基于图像的内容,并允许在该内容上执行动画的一个对象。Layer通常用于为视图提供备份存储,但也可以在没有视图的情况下使用它来显示内容。图层的主要工作是管理您提供的视觉内容,但图层本身具有可设置的视觉属性,如背景颜色、边框和阴影。除了管理可视内容外,它还维护用于在屏幕上显示内容的几何形状信息(如位置、大小和转换)。可以通过修改图层的属性来初始化图层的内容或几何图形上的动画方式。Layer对象通过采用CAMediaTiming协议来封装layer及其动画的持续时间和节奏,CAMediaTiming协议定义了layer的时间信息。

如果CALayer对象是由View创建的,View通常会自动将自己分配为layer的delegate,这种关系不应该去修改。对于你自己创建的layer,你可以分配一个delegate对象,并使用该对象动态地提供层的内容和执行其他任务。一个层也可以有一个布局管理器对象(分配给layoutManager属性)来单独管理子视图的布局。

二、相互联系

  • UIView和CALayer一一对应,创建UIView的时候还自动创建一个CALayer;
  • 如果CALayer对象是由UIView对象创建的,UIView对象通常会自动将自己分配为CALayer对象的代理,负责管理显示内容;

三、设计原因

  • 职责分离,各自负责各自的事情。
  • 通用性。比如NSView(Mac) 和 UIView(iOS) 布局不一样,但是可以复用同一个渲染逻辑。

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