美文网首页
UIView,UIWindow,CALayer之间的区别联系

UIView,UIWindow,CALayer之间的区别联系

作者: 上官凌玉 | 来源:发表于2016-09-05 09:42 被阅读75次

    UIView是视图的基类,UIViewController是视图控制器的基类,UIResponder是表示一个可以在屏幕上响应触摸事件的对象;

    UIwindow是UIView的子类,UIWindow的主要作用:一是提供一个区域来显示UIView,二是将事件(event)的分发给UIView,一个应用基本上只有一个UIWindow.

    万物归根,UIView和CALayer都是的老祖都是NSObjet。可见UIResponder是用来响应事件的,也就是UIView可以响应用户事件。

    CALayer和UIView的区别:

    1.1 UIView的继承结构为: UIResponder : NSObject。

    CALayer的继承结构为:NSObject。可见UIResponder是用来响应事件的,也就是UIView可以响应用户事件,CALayer直接从NSObject继承,因为缺少了UIResponder类,不能响应任何用户事件

    1.2所属框架,UIView是在/System/Library/Frameworks/UIKit.framework中定义的,UIKit主要是用来构建用户界面,并且是可以响应事件的。CALayer是在/System/Library/Frameworks/QuartzCore.framework定义的。而且CALayer作为一个低级的,可以承载绘制内容的底层对象出现在该框架中。

    1.3 UIView相比CALayer最大区别是UIView可以响应用户事件,而CALayer不可以。UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制。UIView是基于CALayer的高层封装。

    1.4相似支持1:相似的树形结构2:显示内容绘制方式3:布局约束

    总结一下就是:UIView是用来显示内容的,可以处理用户事件.CALayer是用来绘制内容的,对内容进行动画处理依赖与UIView来进行显示,不能处理用户事件

    为啥有两套体系并不是两套体系?UIView和CALayer是相互依赖的关系。UIView依赖与calayer提供的内容,CALayer依赖uivew提供的容器来显示绘制的内容。归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer实现,添加了响应事件的能力。UIView本身,更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,bounds等等,实际上内部都是在访问它所包含的CALayer的相关属性。

    UIView的layer树形在系统内部,被系统维护着三份copy(这段理解有点吃不准)。

    第一份,逻辑树,就是代码里可以操纵的,例如更改layer的属性等等就在这一份。

    第二份,动画树,这是一个中间层,系统正在这一层上更改属性,进行各种渲染操作。

    第三份,显示树,这棵树的内容是当前正被显示在屏幕上的内容。

    这三棵树的逻辑结构都是一样的,区别只有各自的属性。

    UIView的主layer以外,对它的subLayer,也就是子layer的属性进行更改,系统将自动进行动画生成。

    CALayer的坐标系系统和UIView有点不一样,它多了一个叫anchorPoint的属性,它使用CGPoint结构,但是值域是0~1,也就是按照比例来设置。这个点是各种图形变换的坐标原点,同时会更改layer的position的位置,它的缺省值是{0.5, 0.5},也就是在layer的中央。

    相关文章

      网友评论

          本文标题:UIView,UIWindow,CALayer之间的区别联系

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