从框架来说
CALayer
基于 QuartzCore
框架
UIView
基于 UIKit
框架
UIView可以响应事件,Layer不可以.
UIKit
使用UIResponder
作为响应对象,来响应系统传递过来的事件并进行处理。
在 UIResponder
中定义了处理各种事件和事件传递的接口。
UIApplication
、UIViewController
、UIView
、和所有从UIView
派生出来的UIKit
类(包括UIWindow
)都直接或间接地继承自UIResponder
类。
CALayer直接继承 NSObject,并没有相应的处理事件的接口。
图片.png
UIView是CALayer的delegate
图片.png-
UIView
主要处理事件,CALayer
负责绘制 - 每个
UIView
内部都有一个CALayer
在背后提供内容的绘制和显示 -
UIView
的尺寸样式都由内部的Layer
所提供。两者都有树状层级结构,layer
内部有SubLayers
,View
内部有SubViews
.但是Layer
比View
多了个AnchorPoint
总结
-
创建UIView对象时,UIView内部会自动创建一个层(CALayer对象),通过UIView的layer属性可以访问这个层。当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图渲染,并且会将所有内容绘制在自己的层上,绘图完毕后,系统会将层拷贝到屏幕上,于是就完成了UIView的显示
-
UIView相比CALayer最大区别是UIView继承自UIResponder,可以响应用户事件,而CALayer不可以;UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制。
-
UIView本身,更像是一个CALayer的管理器,访问它的和绘图、坐标相关的属性,如frame,bounds等,实际上内部都是访问它所在CALayer的相关属性
-
UIView和CALayer是相互依赖的关系。UIView依赖CALayer提供的内容,CALayer依赖UIView提供的容器来显示绘制的内容。归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer实现,添加了响应事件的能力。
网友评论