UIView与CALayer
我们都知道每个UIView都包含一个CALayer,并且很多的操作都是直接对layer的操作,比如设置圆角、阴影、边框等等。
从本质上来说,UIView是在CALayer上的封装,是一个比较简单的封装。并在CALayer的基础之上添加了手势识别等特性。
这里我们会产生两个问题:
1、为什么说UIView是CALayer的一个简单的封装?
首先CALayer是QuartzCore库内的类,QuartzCore/CALayer的类定义里面有很多属性(变量)及方法在<UIKit/UIView>中可以找到几乎一模一样的对应;比如frame、hiden等。但也有很多方法是UIView所没有的,所以UIView只是把CALayer常用的接口(属性和方法)暴露出来了,让View更容易使用。这就是为什么说UIView是在CALayer一个比较简单的封装。
2、为什么不直接使用CALayer而要封装一个UIView?
iOS平台的Cocoa Touch是源于OS X平台的Cocoa,是在Cocoa的基础之上添加了适用于移动手机设备的手势识别、动画等特性。但从底层上来说Cocoa Touch和Cocoa共用一套底层的库。其中就包括了QuartCore.framework;但QuartCore.framework一开始就是为OS X设计的,所以其中有部分特性是不适合做移动设备开发的,比如最重要的坐标系统。因此,我们也就不难理解为何UIView/NSView在CALayer上做了一层封装。
以上就是UIView与CALayer的主要关系。
网友评论