UIView和Calyer

作者: 雷3雷 | 来源:发表于2018-09-13 18:46 被阅读96次

1.首先UIView可以响应事件,Layer不可以.UIKit使用UIResponder作为响应对象,来响应系统传递过来的事件并进行处理。UIApplication、UIViewController、UIView、和所有从UIView派生出来的UIKit类(包括UIWindow)都直接或间接地继承自UIResponder类。在 UIResponder中定义了处理各种事件和事件传递的接口, 而 CALayer直接继承 NSObject,并没有相应的处理事件的接口

2.View中frame getter方法,bounds和center,UIView并没有做什么工作;它只是简单的各自调用它底层的CALayer的frame,bounds和position方法。

3.UIView主要是对显示内容的管理而 CALayer 主要侧重显示内容的绘制。

然后我在上面两个方法加了断点,可以看到如下的执行。

UIView和Calyer

可以看到 UIView 是 CALayer 的CALayerDelegate,我猜测是在代理方法内部[UIView(CALayerDelegate) drawLayer:inContext]调用 UIView 的 DrawRect方法,从而绘制出了 UIView 的内容. 可以人为view 是Calayer的代理

4.在做 iOS 动画的时候,修改非 RootLayer的属性(譬如位置、背景色等)会默认产生隐式动画,而修改UIView则不会

CALayer动画与UIView动画的使用场合

        我本来对于CALayer动画的一些使用场合比较疑惑,可以直接用UIView块动画为什么要费心思写CALayer动画呢?所以首先,我想说一下CALayer动画与UIView动画的使用场合。

        1、UIView属于UIKit框架,属于苹果原生框架,而CALayer属于QuartzCore框架,而后者是可以跨平台的,所以当需要跨平台的时候就用CALayer动画喽。

        2、UIView可以与用户交互,而CALayer只用于展示,所以,如果需要与用户交互的动画就用UIView动画,不需要交互的,就用CALayer。

总结

总接来说就是如下几点:

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

在 View显示的时候,UIView 做为 Layer 的 CALayerDelegate,View 的显示内容由内部的 CALayer 的 displayCALayer 是默认修改属性支持隐式动画的,

在给 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 不可以

CATransactions 让layer 动画 完不回弹

相关文章

  • UIView和Calyer

    1.首先UIView可以响应事件,Layer不可以.UIKit使用UIResponder作为响应对象,来响应系统传...

  • iOS 之动画

    iOS 之动画 CALayer 和 UIView CALyer:主要负责渲染(界面和动画) UIView:在 la...

  • UIView和CALayer

    CALyer介绍 CALyer类在概念上和UIView类似,都是一些被层级关系树管理的巨型块,也包含内容,子图层的...

  • 隐式动画

    动画的体现分为显示动画和隐式动画,在实现上分为核心动画,和UIView 动画。当你改变CALyer的一个可做动画的...

  • iOS 底层原理 - Uiview 与 Calyer 相关视图知

    原文作者:DaSen原文链接:https://juejin.im/post/6885719547911864334...

  • CALayer 简单使用

    片头曲 曲曲曲曲曲曲曲曲曲曲曲曲曲 CALayer 0.calyer的简介 1.使用calyer layerVie...

  • CALyer介绍

    CALayer1-简介CALayer2-创建新的层CALayer3-层的属性CALayer4-自定义层 注意点 第...

  • CALyer动画

    动画效果:

  • CALyer mask

    参考地址:https://zsisme.gitbooks.io/ios-/content/chapter5/tra...

  • 问题汇总

    1、UIView和CALayer区别UIView和CALayer的区别.UIView相对于CAlayer来说就多了...

网友评论

    本文标题:UIView和Calyer

    本文链接:https://www.haomeiwen.com/subject/oulnqftx.html