概念对比
UIView和CALayer在概念上有诸多相似之处,比如都可以进行绘制,都是一些矩形块,都会去管理其子视图或者子图层的位置。两者最大的区别就是CALayer不处理用户的交互。
平行的层级关系
每一个view都有一个CALayer的图层属性,视图的责任就是创建并管理这个图层(View在创建该layer时会将其delegate指向自己)。当子视图添加或移除时,子视图所关联的图层也要在层级关系中做相同的操作。
实际在屏幕上所显示和动画的都是layer,view只是对layer的一个封装,在其基础上增加了交互和一些CoreAnimation底层方法的高级接口。
分离的原因
UIView和CALayer分开的主要目的是进行职责分离。这样也可以避免一些重复代码,因为MacOS和iOS的交互很大不同所以就有了UIView和NSView,但是其底层都是同一套CoreAnimation,也就是说它们的显示也都是基于CALayer的。
网友评论