CALayer

CALayer继承自NSObject   遵守协议NSCoding、CAMediaTiming。属于QuartzCore框架。iOS 2.0后可用。

1.CALayer类用于管理基于图像的内容,可以这些内容上进行动画。layer通常用于提供视图的后台存储,但也可以不使用视图只适用图层来显示内容。layer的主要功能是管理你提供的视图内容,但它本身也有一些视觉属性可供设置,比如背景色、边框、阴影。除了管理视图内容,layer同时也包含了一些自身内容相关的几何信息,比如position/size/transform,这些用于使内容显示在屏幕上。可以修改layer的属性来初始化图层上的内容或几何动画。一个layer对象封装了时长和频率,它遵守CAMediaTiming协议,这个协议定义了layer的定时信息。

如果一个layer对象是在创建view的时候创建的,那么这个view一般情况下默认是这个layer的代理,而且不能改变这一关系。如果是手动创建的layer,你可以指定一个代理对象,再用这个代理动态地显示该layer的内容并执行其他代理方法。一个layer也有一个布局管理对象(layout manager object)来逐一管理layer子视图的布局


每个 UIView 内部都有一个 CALayer 来提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提供。两者都有树状层级结构,layer 内部有 SubLayers,View 内部有 SubViews.但是 Layer 比 View 多了个AnchorPoint

在 View显示的时候,UIView 做为 Layer 的 CALayerDelegate,View 的显示内容由内部的 CALayer 的 display

CALayer 是默认修改属性支持隐式动画的,在给 UIView 的 Layer 做动画的时候,View 作为 Layer 的代理,Layer 通过 actionForLayer:forKey:向 View请求相应的 action(动画行为)

layer 内部维护着三分 layer tree,分别是 presentLayer Tree(动画树),modeLayer Tree(模型树), Render Tree (渲染树),在做 iOS动画的时候,我们修改动画的属性,在动画的其实是 Layer 的 presentLayer的属性值,而最终展示在界面上的其实是提供 View的modelLayer

两者最明显的区别是 View可以接受并处理事件,而 Layer 不可以

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,149评论 5 13
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,585评论 6 30
  • 前言 前面发了一篇iOS 面试的文章,在说到 UIView 和 CALayer 的区别和联系的时候,被喵神指出没有...
    Mz楓阅读 815评论 0 4
  • UIView与CALayer的关系 在iOS系统中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一...
    kidzss阅读 1,510评论 0 6
  • CALayer - 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本...
    Hevin_Chen阅读 1,161评论 0 10