UIView与CALayer的主要区别
UIView是可以响应事件的,但是CALayer不能响应事件
UIView主要负责管理内容,而CALayer主要负责渲染和呈现。如果没有CALayer,我们是看不到内容的。
CALayer维护着三个layer tree,分别是presentLayer Tree、modeLayer Tree、Render Tree,在做动画的时候,我们修改动画的属性,其实是修改presentLayer的属性值,而最终展示在界面上的其实是提供UIView的modelLayer。
有人说UIView就像一个画板,而layer就像画布,一个画板上可以有很多块画布,但是画布不能有画板。
layer-based drawing不同于view-based drawing,后者的性能消耗是很高的,它是在主线程上直接通过CPU完成的,而且通常是在-drawRect:中绘制动画。
UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自UIView。它本身完全是由CoreAnimation来实现的。它真正的绘图部分,是由一个CALayer类来管理。UIView本身更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame、bounds等,实际上内部都是在访问它所包含的CALayer的相关属性。
苹果官方:
层不能替代应用程序的视图——也就是说,您不能仅基于层对象创建可视界面。层为视图提供基础设施。具体来说,图层使绘制和动画视图内容变得更容易和更有效,并在这样做的同时保持高帧率。然而,有许多事情图层做不到。层不处理事件、绘制内容、参与响应器链或做许多其他事情。因此,每个应用程序必须仍然有一个或多个视图来处理这些交互。
网友评论