分享

【iOS学习】UIView和CALayer的那点事

 九辰夕 2016-03-17

首先,UIViewCALayer的老祖都是NSObjet

 (1).UIView的直接父类为UIResponder,UIResponder是用来响应事件的,也就是UIView可      以响应用户事件。

 (2).CALayer的直接父类为NSObject,因为缺少了UIResponder类,所以CALayer悲催的不能响应     任何用户事件。

 (3).CALayer定义了positionsizetransformanimations等基本属性。UIView定义了size

     frameposition等基本属性。 

其次,我们看所属框架

 (1).UIView是在 /System/Library/Frameworks/UIKit.framework中定义的。UIKit主要是用来构建用户界面,并且是可以响应事件的(得意与UIView的父类UIResponder,至于UIResponderd的实现原理,在此不做过多的解释)在这里思考一个问题UIView既然是构建用户界面的,那他是通过什么方式绘制这些图片、文字之类的信息的呢?iOS中的2D图像绘制都是通过QuartzCore.framework实现的。难道是通过QuartzCore.framework实现的?那又是通过什么方式和QuartzCore.framework联系起来的呢??我们一会再看。

 (2).CALayer是在/System/Library/Frameworks/QuartzCore.framework定义的。而且CALayer作为一个低级的,可以承载绘制内容的底层对象出现在该框架中。现在比较一下uiviewcalayer都可以显示图片文字等信息。难道apple提供了,两套绘图机制吗?不会。

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

   大家都知道QuartzCoreIOS中提供图像绘制的基础库。并且CALayer是定义该框架中。难道UIView的底层实现是CALayer??

 官方解释:

 UIView是基于CALayer的高层封装。The view system in iOS is built directly on top of Core Animation layers.

 UIView 的方法:

 layerClass - Implement this method only if you want your view to use a different Core Animation layer for its backing store. For example, if you are using OpenGL ES to do your drawing, you would want to override this method and return the CAEAGLLayer class.

该方法保留了UIView的本质。即对UIView所管理的内容,任何显示也是受到CALayer的影响的。

 最后,看两者的相似之处

      1:相似的树形结构

      2:显示内容绘制方式

      3: 布局约束

 总结:

 UIView是用来显示内容的,可以处理用户事件

 CALayer是用来绘制内容的,对内容进行动画处理依赖与UIView来进行显示,不能处理用户事件。

 两者关系:UIViewCALayer是相互依赖的关系。UIView依赖与calayer提供的内容,CALayer依赖uivew提供的容器来显示绘制的内容。归根到底CALayer是这一切的基础,如果没有CALayerUIView自身也不会存在,UIView是一个特殊的CALayer实现,添加了响应事件的能力。所以,在选择的过程中,需要考虑到实际的情况。如果显示出来的东西需要跟用户进行交互的话,用

UIView;如果不需要跟用户进行交互,用UIView或者CALayer都可以当然,CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级 UIView来自CALayer,高于CALayer,是

CALayer高层实现与封装。UIView的所有特性来源于CALayer支持。两者是发之于肤,血之于

肉,灵之于魄的依存关系。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多