- 万剑归宗,UIView和CALayer都是的祖宗都是NSObjet。
继承结构
-
UIView的继承结构为: UIResponder : NSObject。
- UIResponder是用来响应事件的,也就是UIView可以响应用户事件
-
CALayer的继承结构为: NSObject
- 直接从 NSObject继承,因为缺少了UIResponder类,所以CALayer悲催的不能响应任何用户事件。
UIView是视图的基类,UIViewController是视图控制器的基类,,UIResponder是表示一个可以在屏幕上响应触摸事件的对象;
所属框架
- UIView是在 /System/Library/Frameworks/UIKit.framework中定义的
- UIKit主要是用来构建用户界面,并且是可以响应事件的(源于UIView的父类UIResponder)
- UIView是用来显示内容的,可以处理用户事件
- CALayer是在/System/Library/Frameworks/QuartzCore.framework定义的。
- CALayer作为一个低级的,可以承载绘制内容的底层对象出现在该框架中。
- CALayer是用来绘制内容的,对内容进行动画处理依赖与UIView来进行显示,不能处理用户事件。
作用机制
- 当UIView需要显示的时候,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上(CALayer上),系统将图层拷贝到屏幕上,完成UIView的显示。
- 通过操作这个CALayer对象,可以很方便的调整UIView的一些界面属性,比如:阴影,圆角大小,旋转等等。
viewT.layer.cornerRadius = 10;//设置半径
viewT.layer.borderWidth = 10;//设置边框的宽度,当然可以不要
viewT.layer.borderColor = [[UIColor redColor] CGColor];//设置边框的颜色
viewT.layer.masksToBounds = YES;//设为NO去试试
- 所以UIView相比CALayer最大区别是UIView可以响应用户事件,而CALayer不可以。UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制。
- UIView和CALayer是相互依赖的关系。UIView依赖与CALayer提供的内容,CALayer依赖UIView提供的容器来显示绘制的内容。归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer实现,添加了响应事件的能力。
- UIView来自CALayer,高于CALayer,是CALayer的高层实现与封装。UIView的所有特性来源于CALayer支持。