CoreAnimation :在字面意思为“核心动画”,但是如果您认为它仅仅是一个动画框架,那可能就要错过一些经典功能了。动画,只是CoreAnimation功能的一小部分,毕竟人家的源头是一个叫做Layer Kit的库演变而来,和动画无关。

  CoreAnimation作为一个复合引擎,将不同的视图层组合在屏幕中,并且存储在图层树中,向我们展示了所有屏幕上的一切。而图层树又是什么呢?下面来探讨一下第一个概念图层树:

图层树:如果您开发过iOS/ipad应用程序,并且使用过Xcode中提供的一个如下图视图调试工具:

就会发现,视图上的所有子视图,都是有很明显的视图层次感的,其实,这就是图层树的一种不完全正确的表达形式。不完全正确是因为我们现在看到的,大部分是UIViewController和UIView对象的层次关系,真正的CALayer图层树,其实是CALayer对象组合而成,相信大家对CALayer都不算陌生,因此在这里就不多赘述,只做简单描述。

  CALayer类在概念上和UIView类似,同样可以向UIView一样被层级关系树管理,也可以显示一些内容,也可以进行图层的位置变换,甚至可以像UIView一样来进行动画。它和UIView最大的不同就是CALayer不处理用户的交互行为,它并不清楚具体的响应链,因此它并不能响应事件,即使它提供了一些方法来判断某个触点是否在图层的范围之内。

  每个UIView都有一个CALayer对象的图层属性,视图的职责就是创建并管理这个图层,以确保当子视图在层级关系添加或者被移除的时候,他们关联的图层也同样对应在层级关系中有相同的操作。而实际上,我们眼中的屏幕中的所有,都是UIView背后的那写layer对象来实现的,UIView的各种操作,仅仅是对layer的一个封装,并提供了一些响应功能和高级动画API。看到这里,可能有朋友会有疑问,既然关系为封装,为何又要进行UIView和CALayer的分离呢?为什么不直接使用一个层级进行响应事件和内容显示呢?原因在于要做到职责分离,这样也能避免很多重复代码。虽然它们功能上很相似,但在实现上具有显著的区别。

其实,一个视图上,不仅存在UIView和CALayer两个层次树,还存在呈现树和渲染树。当前层面仅供了解,后续会陆续讲到。

图层的功能:

  如果说CALayer是UIView内部的具体实现细节,为什么我们还要全面的了解它呢,毕竟apple已经为我们提供了简单易用的UIView接口。在某种意义上来说的确是这样的,对一些简单的需求来说,我们确实没有必要处理CALayer,比如说简单动画,我们完全可以使用UIView提供的高级动画API。然而,举个小例子,如果我们需要一些自定义高级复杂的动画,你会发现,系统UIVIew的API,并不能满足或者说很难满足我们的需求,这时,我们就需要介入CoreAnimation底层之外了。这仅仅是个小例子,对于图层,它拥有UIView没有的功能如下:

  • 阴影
  • 3D变换
  • 非矩形范围
  • 透明遮罩
  • 多级非线性动画

  这些功能我们将在未来章节中继续讨论。

一、CoreAnimation之图层树详解的更多相关文章

  1. 数据结构图文解析之:AVL树详解及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  2. trie字典树详解及应用

    原文链接    http://www.cnblogs.com/freewater/archive/2012/09/11/2680480.html Trie树详解及其应用   一.知识简介        ...

  3. Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)【转】

    转自:https://blog.csdn.net/radianceblau/article/details/74722395 版权声明:本文为博主原创文章,未经博主允许不得转载.如本文对您有帮助,欢迎 ...

  4. JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删改查),事件

    JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删 ...

  5. 线段树详解 (原理,实现与应用)(转载自:http://blog.csdn.net/zearot/article/details/48299459)

    原文地址:http://blog.csdn.net/zearot/article/details/48299459(如有侵权,请联系博主,立即删除.) 线段树详解    By 岩之痕 目录: 一:综述 ...

  6. Linux dts 设备树详解(二) 动手编写设备树dts

    Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 前言 硬件结构 设备树dts文件 前言 在简单了解概念之后,我们可以开始尝试写一个 ...

  7. Linux dts 设备树详解(一) 基础知识

    Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 1 前言 2 概念 2.1 什么是设备树 dts(device tree)? 2. ...

  8. AVL树详解

    AVL树 参考了:http://www.cppblog.com/cxiaojia/archive/2012/08/20/187776.html 修改了其中的错误,代码实现并亲自验证过. 平衡二叉树(B ...

  9. trie树--详解

    文章作者:yx_th000 文章来源:Cherish_yimi (http://www.cnblogs.com/cherish_yimi/) 转载请注明,谢谢合作.关键词:trie trie树 数据结 ...

随机推荐

  1. Windows phone应用开发[17]-xap提交异常处理

    在windows phone 应用提交操作上早在2011年时就写过一篇Windows phone 应用开发[4]-应用发布,那时wp应用提交官方市场的流程繁杂[超过了5步].因为上传和填写应用信息页面 ...

  2. [转] Struts2入门示例教程

    原文地址:http://blog.csdn.net/wwwgeyang777/article/details/19078545/ 回顾Struts2的使用过程,网上搜的教程多多少少都会有点问题,重新记 ...

  3. 用CSS绘制最常见的形状和图形

    #rectangle { width: 200px; height: 100px; background: red; } #circle { width: 100px; height: 100px; ...

  4. jquery 将disabled的元素置为enabled的三种方法

    转--http://www.jb51.net/article/19342.htm 在jquery中可以通过jqueryObj.attr("disabled","disab ...

  5. 自己积累的一些Emgu CV代码(主要有图片格式转换,图片裁剪,图片翻转,图片旋转和图片平移等功能)

    using System; using System.Drawing; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; na ...

  6. bzoj4282慎二的随机数列

    海带头又上线了QwQ~ 这是一个奇怪的lis问题 显然一定存在一种最优答案使所有辨认不清的数都在答案中. [为什么呢]因为你完全可以用一个'N'来替换一个'K'啊QwQ~ 那么在选完所有'N'之后,一 ...

  7. 写个c++小例子

    class Rational{ public: const Rational operator*( const Rational& rhs); Rational(int num); priva ...

  8. 【ESRI论坛6周年征文】ArcEngine注记(Anno/ Label/Element等)处理专题 -入门篇

    原发表于ESRI中国社区,转过来.我的社区帐号:jhlong http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=122097 ----------- ...

  9. 利用Render Texture实现游戏的小雷达效果(摄影机分屏)

    最近游戏蛮牛在举办一个活动,就是要做出这样的效果: 题目:实现游戏分屏效果 要求:1.        分屏,且分割线不规则(即非水平或垂直):2.        各屏可单独操作(移动.缩放),操作指该 ...

  10. Sublime编辑器安装使用

    用习惯了VS2010强大的IDE工具,但也被它折腾过.烦恼过,当vs加载超过万行的脚本代码时,界面半天才反应,经常卡死,电脑配置决定算得上顶呱呱. 不喜欢逆来顺受,于是选择了txt文本编辑器,最原始的 ...