一、CoreAnimation之图层树详解
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之图层树详解的更多相关文章
- 数据结构图文解析之:AVL树详解及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- trie字典树详解及应用
原文链接 http://www.cnblogs.com/freewater/archive/2012/09/11/2680480.html Trie树详解及其应用 一.知识简介 ...
- Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)【转】
转自:https://blog.csdn.net/radianceblau/article/details/74722395 版权声明:本文为博主原创文章,未经博主允许不得转载.如本文对您有帮助,欢迎 ...
- JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删改查),事件
JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删 ...
- 线段树详解 (原理,实现与应用)(转载自:http://blog.csdn.net/zearot/article/details/48299459)
原文地址:http://blog.csdn.net/zearot/article/details/48299459(如有侵权,请联系博主,立即删除.) 线段树详解 By 岩之痕 目录: 一:综述 ...
- Linux dts 设备树详解(二) 动手编写设备树dts
Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 前言 硬件结构 设备树dts文件 前言 在简单了解概念之后,我们可以开始尝试写一个 ...
- Linux dts 设备树详解(一) 基础知识
Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 1 前言 2 概念 2.1 什么是设备树 dts(device tree)? 2. ...
- AVL树详解
AVL树 参考了:http://www.cppblog.com/cxiaojia/archive/2012/08/20/187776.html 修改了其中的错误,代码实现并亲自验证过. 平衡二叉树(B ...
- trie树--详解
文章作者:yx_th000 文章来源:Cherish_yimi (http://www.cnblogs.com/cherish_yimi/) 转载请注明,谢谢合作.关键词:trie trie树 数据结 ...
随机推荐
- 基于OpenSSL实现C/S架构中的https会话
在实际生产中实现公司内部的web服务器加密访问时,我们就需要实现公司内部的私钥CA,并且完成对web服务器的签署请求,这样我们就可以在自身的内部机构实现对数据的机密性.完整性.身份验证的访问与传输 实 ...
- python day2:python 初识(二)
大纲: 一.运算符 1.算数运算符 notice: 除法运算在python2.7和python3.x 的不同 2.比较运算符 3.赋值运算符 4.逻辑运算符 5.成员运算符 二.基本数据类型和方法介绍 ...
- Mbatis Oracle 第一次插入失败 useGeneratedKeys
<insert id="insertAgentInfo" parameterType="pd" useGeneratedKeys="false& ...
- 前端HTML-CSS规范
目录 HTML 语法 HTML5 doctype 语言属性(Language attribute) 字符编码 IE 兼容模式 引入 CSS 和 JavaScript 文件 实用为王 属性顺序 布尔(b ...
- WCF错误:由于目标计算机积极拒绝,无法连接
今天学习WCF时用C#重写测试例子时,发生错误:由于目标计算机积极拒绝,无法连接.找了N久,网上也没有找到实际的解决方法.查看netstat -an发现当自承载宿主运行时,没有侦听配置的端口.开始总以 ...
- MYSQL开启慢查询日志实施
查看当前服务器是否开启慢查询:1.快速办法,运行sql语句show VARIABLES like "%slow%" 2.直接去my.conf中查看.my.conf中的配置(放在[m ...
- C# 的界面控件属性修改线程安全问题
今天在实验delegate与thread 在初步的实验结束后,因为原来的delegate只有一个函数会被调用,感觉没有达到delegate的极致,所以又重新自己定义了一个delegate,在另一个线程 ...
- I() 方法
I()方法的介绍及使用: http://www.jb51.net/article/51213.htm
- 微信公众平台推出"微信保护"提升微信账号安全 附微信保护开启教程
前两天小美女的微信公众平台要群发消息时提示需要绑定手机才能操作,当时还以为是动态ip的问题,今天微信公众平台安全中心就说升级了,原来那时已经在公测了.微信公众平台推出"微信保护", ...
- 公众平台关注用户达到5万即可开通流量主功能 可以推广APP应用
今天微信公众平台发布发布了一些更新,公众帐号的关注用户达到5万,即可开通流量主功能,之前的是要求10万粉丝,这是一个微信开放的信号.广告主可推广苹果商店应用或腾讯开放平台应用.新增卡片和图文广告规格. ...