- UIView主要是对显示内容的管理,而CALayer主要是对显示内容的绘制。
严格来说,UIView是CALayer的CALayerDelegate,在代理方法内部[CALayerDelegate drawLayer:inContext]中调用UIView的DrawRect方法,从而绘制出UIView的内容。 - UIView可以响应事件,Layer不可以。
UIKit使用UIResponder作为响应对象,来响应系统传递过来的事件并进行处理,UIApplication、UIViewController、UIView和一切从UIView派生出来的UIKit类都直接或者间接继承自UIResponder。而UIResponder中定义了处理各种事件和事件传递的接口。
而CALayer直接继承自NSObject,并没有响应的处理事件的接口。 - 在做iOS动画的时候,修改费RootLayer的属性(譬如位置、背景色等)会产生默认的隐式动画,而修改UIView不会。原因是UIView默认情况下禁止了Layer动画,但是在animation block中重新启用了它们。可以通过动画事务(CATransaction)去关系隐式动画
任何可动画的CALayer属性改变时,layer都会寻找运行合适的action来实现这个改变,layer向它的delegate发送actionForLayer:ForKey:消息来询问提供一个对应属性变化的action。参考资料 - 每个UIVIew内部都有一个CALayer在背后提供内容的绘制和显示,并且UIView的样式和尺寸都由内部的Layer所提供。两者都有树状层级结构,layer内部有subLayers,View内部有SubViews,但是Layer比view多了个AnchorPoint
- UIView和CALayer的frame映射及View如何创建CALayer
一个Layer的frame是由它的anchorPoint、position、bounds、transforms共同决定的,而view的frame只是简单的返回了layer的frame,同样的,View 的center和bounds也是返回Layer的一些属性。参考资料
网友评论