美文网首页
UIWindow和UIView和 CALayer 的联系和区别?

UIWindow和UIView和 CALayer 的联系和区别?

作者: 知本集 | 来源:发表于2015-12-03 11:27 被阅读337次

    分类来看:

    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的相关属性。

    相关文章

      网友评论

          本文标题:UIWindow和UIView和 CALayer 的联系和区别?

          本文链接:https://www.haomeiwen.com/subject/tahshttx.html