UIWindow和UIView和 CALayer 的联系和区别?
分类来看:
UIView是视图的基类,
UIViewController是视图控制器的基类,
UIResponder是表示一个可以在屏幕上响应触摸事件的对象;
UIwindow:
UIwindow是UIView的子类,
UIWindow的主要作用:
一是提供一个区域来显示UIView,二是将事件(event)的分发给UIView,一个应用基本上只有一个UIWindow.
万物归根,UIView和CALayer都是的老祖都是NSObjet。可见 UIResponder是用来响应事件的,也就是UIView可以响应用户事件。
CALayer 和 UIView 的区别:
UIView的继承结构为: UIResponder : NSObject。
CALayer的继承结构为: NSObject。可见 UIResponder是用来响应事件的,也就是UIView可以响应用户事件,CALayer直接从 NSObject继承,因为缺少了UIResponder类,不能响应任何用户事件。
所属框架,UIView是在 /System/Library/Frameworks/UIKit.framework中定义的,UIKit主要是用来构建用户界面,并且是可以响应事件的。CALayer是在/System/Library/Frameworks/QuartzCore.framework定义的。而且CALayer作为一个低级的,可以承载绘制内容的底层对象出现在该框架中
UIView相比CALayer最大区别是UIView可以响应用户事件,而CALayer不可以。UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制。UIView是基于CALayer的高层封装。
总结:
UIView是用来显示内容的,可以处理用户事件。
CALayer是用来绘制内容的,对内容进行动画处理依赖与UIView来进行显示,不能处理用户事件。
为什么是两套体系?
并不是两套体系,UIView和CALayer是相互依赖的关系。UIView依赖与calayer提供的内容,CALayer依赖uivew提供的容器来显示绘制的内容。归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer实现,添加了响应事件的能力。UIView本身,更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,bounds等等,实际上内部都是在访问它所包含的CALayer的相关属性。