uiview和calayer

从框架来说

CALayer基于 QuartzCore 框架
UIView 基于 UIKit 框架

UIView可以响应事件,Layer不可以.

UIKit使用UIResponder作为响应对象,来响应系统传递过来的事件并进行处理。
UIResponder中定义了处理各种事件和事件传递的接口。
UIApplicationUIViewControllerUIView、和所有从UIView派生出来的UIKit类(包括UIWindow)都直接或间接地继承自UIResponder类。

WechatIMG146.png

CALayer直接继承 NSObject,并没有相应的处理事件的接口。


图片.png

UIView是CALayer的delegate

图片.png
  • UIView主要处理事件,CALayer负责绘制
  • 每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示
  • UIView 的尺寸样式都由内部的 Layer 所提供。两者都有树状层级结构,layer内部有 SubLayersView内部有 SubViews.但是 LayerView多了个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实现,添加了响应事件的能力。

你可能感兴趣的:(uiview和calayer)