目录
核心动画编程介绍........................................................................................................................................... 1本文档结构............................................................................................................................ 1
第一章 核心动画概念 .............................................................................................................................. 2
1.1 核心动画类................................................................................................................ 2
-
1.1.1 图层类(Layer Classes)............................................................................... 3
-
1.1.2 动画和计时类 ................................................................................................. 5
-
1.1.3 布局管理器类 ................................................................................................. 6
-
1.1.4 事务管理类 ..................................................................................................... 6
第二章 核心动画渲染框架 ...................................................................................................................... 8第三章 图层的几何和变换 ...................................................................................................................... 9
-
3.1 图层的坐标系............................................................................................................ 9
-
3.2 指定图层的几何........................................................................................................ 9
-
3.3 图层的几何变换...................................................................................................... 12
-
3.3.1 变换函数 ....................................................................................................... 13
-
3.3.2 修改变换的数据结构 ................................................................................... 14
-
3.3.3 通过键值路径修改变换 ............................................................................... 15
-
第四章 图层树的层次结构 .................................................................................................................... 17
-
4.1 什么是图层树的层次结构...................................................................................... 17
-
4.2 在视图里面显示图层.............................................................................................. 17
-
4.3 从图层结构里面添加和删除图层.......................................................................... 18
-
4.4 图层的位置调整和大小改变.................................................................................. 19
4.4.1 自动调整图层大小....................................................................................... 194.5 裁剪子图层.............................................................................................................. 20
第五章 提供图层内容 ............................................................................................................................ 22
-
5.1 给CALAYER提供内容 ............................................................................................. 22
-
5.1.1 设置contents属性.......................................................................................... 22
-
5.1.2 通过委托提供内容 ....................................................................................... 22
-
5.1.3 通过子类提供图层的内容 ........................................................................... 24
-
-
5.2 修改图层内容的位置.............................................................................................. 26
第六章 动画 ............................................................................................................................................ 29
6.1 动画类和时序.......................................................................................................... 292011-11-14|©2011YouMiMobileCo.Ltd.AllRightsReserved.[1]
Core Animation Programming Guide
-
6.2 隐式动画.................................................................................................................. 29
-
6.3 显式动画.................................................................................................................. 30
-
6.4 开始和结束显式动画.............................................................................................. 32
第七章 图层的行为 ................................................................................................................................ 33
-
7.1 行为对象的角色...................................................................................................... 33
-
7.2 已定义搜索模式的行为键值.................................................................................. 33
-
7.3 采用CAACTION协议 ............................................................................................... 34
-
7.4 重载隐式动画.......................................................................................................... 34
-
7.5 暂时禁用行为.......................................................................................................... 36
第八章 事务 ............................................................................................................................................ 37
-
8.1 隐式事务.................................................................................................................. 37
-
8.2 显式事务.................................................................................................................. 37
-
8.2.1 暂时禁用图层的行为................................................................................... 37
-
8.2.2 重载隐式动画的时间................................................................................... 38
-
8.2.3 事务的嵌套................................................................................................... 38
-
第九章 布局核心动画的图层 ................................................................................................................ 409.1 约束布局管理器...................................................................................................... 40
第十章 核心动画的键-值编码扩展 ....................................................................................................... 44
-
10.1 键-值编码兼容的容器类 ........................................................................................ 44
-
10.2 支持默认值.............................................................................................................. 44
-
10.3 封装约定.................................................................................................................. 45
-
10.4 支持结构字段的关键路径...................................................................................... 45
第十一章 图层样式属性 ............................................................................................................................ 47
-
11.1 几何属性.................................................................................................................. 47
-
11.2 背景属性.................................................................................................................. 48
-
11.3 图层内容.................................................................................................................. 48
-
11.4 子图层内容.............................................................................................................. 49
-
11.5 边框属性.................................................................................................................. 50
-
11.6 滤镜属性.................................................................................................................. 50
-
11.7 阴影属性.................................................................................................................. 51
-
11.8 不透明属性.............................................................................................................. 52
-
11.9 混合属性.................................................................................................................. 52
-
11.10 遮罩属性..................................................................................................................53
第十二章 示例:核心动画的菜单样式报刊应用....................................................................................552011-11-14|©2011YouMiMobileCo.Ltd.AllRightsReserved.[2]
Core Animation Programming Guide
-
12.1 用户界面.................................................................................................................. 55
-
12.1.1 检测Nib文件................................................................................................. 56
-
12.1.2 图层的层次结构........................................................................................... 56
-
-
12.2 检测应用程序的NIB文件........................................................................................ 57
-
12.3 检测程序的代码...................................................................................................... 58
12.3.1 QCCoreAnimationKioskStyleMenu.h 和QCCoreAnimationKioskStyleMenu.m 文件 ................................................................ 58
-
12.3.2 检测SelectionView.h ..................................................................................... 58
-
12.3.3 检测SelectionView.h ..................................................................................... 60
12.4 性能注意事项.......................................................................................................... 67
第十三章 动画的属性 ................................................................................................................................ 69
-
13.1 CALAYER的动画属性 ............................................................................................. 69
-
13.2 CIFILTER动画的属性............................................................................................... 71
结束语............................................................................................................................................................. 72
核心动画编程介绍
本文档介绍了在使用核心动画时所涉及的基本概念。核心动画的是 Objective - C的框架,它通过简单的动画编程接口来提供一套高性能的动画引擎。
你应该阅读此文档来理解Cocoa应用程序核心动画工作的机制。 阅读此文档的前提是你已经掌握了Objective-C语言的基础,因为核心动画内部广泛的使用了Objective-C的相关属性。你还应该熟悉键-值编程方法(参考文档 Key-Value CodingProgramming Guide)。同时如果你对Quartz2D编程有一定了解的话,将会对您掌握本文档带来帮助,但这不是必须的(参考文档 Quartz 2D Programming Guide)。
您可以建立两个平台的 Cocoa 应用程序:在 Mac OS X 操作系统和 iOS 操作系统,如 iPhone 和 iPod touch 多点触控设备。核心动画编程指南对这两个平台同时适应,它尽可能的整合两个平台的相同性,同时在必要的时候指出它们的差异性。
本文档结构
核心动画编程指南包含以下内容:
“核心动画概念”提供核心动画的概述。
“图层(Layer)的几何和变换” 描述图层的几何和变换。
“图层树的层次结构”描述图层的结构树和如何在应用程序中使用它。 “提供图层内容” 介绍如何提供基本图层的内容。
“动画” 介绍了核心动画的动画模型。
“图层行为”介绍图层的行为,同时实现隐式动画。
“事务(transactions)”介绍如果通过事务来组合动画。
“布局核心动画的图层”描述布局管理器的限制。
“核心动画的扩展键-值编码”描述核心动画提供的键-值编码。
“图层样式属性”描述了图层样式属性,并提供其视觉效果的例子。 “范例:核心动画菜单样式应用”解剖一个核心动画驱动的用户界面。 “动画的属性”概括层和滤镜的动画属性。
2011-11-14|©2011YouMiMobileCo.Ltd.AllRightsReserved.[1]
Core Animation Programming Guide
第一章 核心动画概念
核心动画是一套包含图形绘制,投影,动画的 Objective–C 类集合。它通过开发人员所熟悉的应用程序套件和 Cocoa Touch 视图架构的抽象分层模式,同时使用先进的合作效果提供了一套流畅的动画。
动态的动画接口很难创建,但是核心动画通过提供如下接口使这些创建起来变得更加简单:
-
简单易用的高性能混合编程模型。
-
类似视图一样,你可以通过使用图层来创建复杂的接口。
-
轻量级的数据结构,它可以同时显示并让上百个图层产生动画效果。
-
一套简单的动画接口,可以让你的动画运行在独立的线程里面,并可以
独立于主线程之外。
-
一旦动画配置完成并启动,核心动画完全控制并独立完成相应的动画帧。
-
提高应用性能。应用程序只当发生改变的时候才重绘内容。再小的应用
程序也需要改变和提供布局服务层。核心动画还消除了在动画的帧速率
上运行的应用程序代码。
-
灵活的布局管理模型。包括允许图层相对同级图层的关系来设置相应属
性的位置和大小。使用核心动画,开发人员可以为他们的应用创建动态用户界面,而无需使用低级
别的图形 API,如 OpenGL 来获取高效的动画性能。
1.1 核心动画类
核心动画类有以下分类:
提供显示内容的图层类。
动画和计时类。
布局和约束类。
事务类,在原子更新的时候组合图层类。
核心动画的基础类包含在 Quartz 核心框架(Quartz Core framework)里面,虽然它的其他图层类在其他框架里面定义。下图显示了核心动画的类层次结构。
2011-11-14|©2011YouMiMobileCo.Ltd.AllRightsReserved.[2]
Core Animation Programming Guide
Figure 1 Core Animation class hierarchy
1.1.1 图层类(Layer Classes)
图层类是核心动画的核心基础,它提供了一套抽象的概念(假如你使用过 NSView或者 UIView 的话,你一定会对它很熟悉)。CALayer 是整个图层类的基础,它是所有核心动画图层类的父类。
和视图类(NSView 或 UIView)一样,CALayer 有自己的父图层类,同时也拥有自己子图层类的集合,它们构成了一个图层树的层次结构。图层绘制类似视图一样自底向上,并指定其几何形状相对他们 superlayer,创建一个相对的局部坐标系。然而图层类通过合并变换矩阵允许你旋转、偏移、拉伸对应的图层内容。具体内容将会在后面“图层(Layer)的几何和变换”部分介绍。
CALayer 从 Application Kit 和 Cocoa Touch 的视图类分离出来,因为没有必要为了显示内容而继承 CALayer 类。因为 CALayer 类的内容显示可以通过以下方法提供: 可以直接或者委托的方式把图层的内容属性设置为 Core Graphics image。
提供直接绘制到一个 Core Graphics image 上下文委托。
2011-11-14|©2011YouMiMobileCo.Ltd.AllRightsReserved.[3]
Core Animation Programming Guide
设置所有图层所具有的可视化样式属性,比如背景颜色、不透明属性、蒙版等。Mac OS X 应用同样可以通过核心图像滤镜来访问它的可视化样式属性。
继承 CALayer 并通过封装方法实现以上任何技术。“提供图层内容”描述了提供内容层可用方法。可视化样式样式属性和它们的顺
序将会在 “图层样式属性”部分详细介绍。
除了 CALayer 类,核心动画类同时提供了显示其他内容的类。这些类在 Mac OS X
和 iOS 上有细微的差别,以下类在 Mac OS X 和 iOS 上都可用:
-
CAScrollLayer 是 CALayer 的子类,简化显示图层的一部分内容。
CAScrollLayer 对象的滚动区域的范围在它的子图层里面定义。CAScrollLaye 不
提供键盘或鼠标事件处理,也不提供可见的滚动条。
-
CATextLayer 可以方便的从字符串或字符串的内容创建一个图层类的内容。
-
CATiledLayer 允许递增的显示大而复杂的图片。Mac OS X 提供如下额外的类:
CAOpenGLLayer 提供了一个OpenGL渲染环境。你必须继承这个类来使用OpenGL 提供的内容。内容可以是静态的,或可随着时间的推移更新。
QCCompositionLayer(由Quartz框架提供)可以把Quartz合成的内容动画显示。
QTMovieLayer and QTCaptureLayer (QTKit 框架提供)提供播放QuickTime 影片和视频直播。
iOS adds the following class:
CAEAGLLayer 提供了一个OpenGLES渲染环境。
CALayer 的类引入键-值编码兼容的容器类概念,也就是说一个类可以使用键 -值编码的方法存储任意值,而无需创建一个子类。CALayer 的还扩展了NSKeyValueCoding 的非正式协议,加入默认键值和额外的结构类型的自动对象包装(CGPoint,CGSize,CGRect,CGAffineTransform 和 CATransform3D)的支持,并提供许多这些结构的关键路径领域的访问。
2011-11-14|©2011YouMiMobileCo.Ltd.AllRightsReserved.[4]
Core Animation Programming Guide
CALayer 同时管理与层关联的动画和行为,。图层接受层树的插入和删除层动作,修改层的属性,或者明确的开发请求。这些行为通常会导致动画发生。见“动画”和“图层操作”的更多信息。
1.1.2 动画和计时类
图层的很多可视化属性是可以隐式动画的。通过简单的改变图层的可动画显示的属性,可以让图层现有属性从当前值动画渐变到新的属性值。例如设置图层的 hidden属性为 YES 将会触发动画使层逐渐淡出。大多数动画属性拥有自己关联的默认动画,你可以轻松地定制和替换。我们将会在后面“动画属性”部分列出一个完整的动画属性列表和它们相应的默认动画。动画的属性也可以显式动画。要显式动画的属性,你需要创建核心动画动画类的一个实例,并指定所需的视觉效果。显式动画不会改变该属性的值,它只是用于动画显示。
核心动画的动画类使用基本的动画和关键帧动画把图层的内容和选取的属性动画的显示出来。所有核心动画的动画类都是从 CAAnimation 类继承而来。CAAnimation实现了 CAMediaTiming 协议,提供了动画的持续时间,速度,和重复计数。CAAnimation 也实现了 CAAction 协议。该协议为图层触发一个动画动作提供了提供标准化响应。
动画类同时定义了一个使用贝塞尔曲线来描述动画改变的时间函数。例如,一个匀速时间函数(linear timing function)在动画的整个生命周期里面一直保持速度不变,而渐缓时间函数(ease-out timing function)则在动画接近其生命周期的时候减慢速度。
2011-11-14|©2011YouMiMobileCo.Ltd.AllRightsReserved.[5]
Core Animation Programming Guide
核心动画额外提供了一系列抽象的和细化的动画类,比如:
CATransition 提供了一个图层变化的过渡效果,它能影响图层的整个内容。动画进行的时候淡入淡出(fade)、推(push)、显露(reveal)图层的内容。这些过渡效果可以扩展到你自己定制的 Core Image 滤镜。
CAAnimationGroup 允许一系列动画效果组合在一起,并行显示动画。
CAPropertyAnimation 是一个抽象的子类,它支持动画的显示图层的关键路径中指定的属性
CABasicAnimation 简单的为图层的属性提供修改。
CAKeyframeAnimation 支持关键帧动画,你可以指定的图层属性的关键路径
动画,包括动画的每个阶段的价值,以及关键帧时间和计时功能的一系列值。在动画运行是,每个值被特定的插入值替代。
核心动画 和 Cocoa Animation 同时使用这些动画类。使用动画描述,是因为这些类涉及到核心动画,这些将会在Animation Types and Timing Programming Guide 有较深入的讨论。
1.1.3 布局管理器类
Application Kit 的视图类相对于 superlayer 提供了经典的“struts and springs”定位模型。图层类兼容这个模型,同时 Mac OS X 上面的核心动画提供了一套更加灵活的布局管理机制,它允许开发者自己修改布局管理器。核心动画的 CAConstraint 类是一个布局管理器,它可以指定子图层类限制于你指定的约束集合。每个约束(CAConstraint 类的实例封装)描述层的几何属性(左,右,顶部或底部的边缘或水平或垂直中心)的关系,关系到其同级之一的几何属性层或 superlayer。
通用的布局管理器和约束性布局管理器将会在“布局核心动画的图层”部分讨论。
1.1.4 事务管理类图层的动画属性的每一个修改必然是事务的一个部分。CATransaction 是核心动画
2011-11-14|©2011YouMiMobileCo.Ltd.AllRightsReserved.[6]
Core Animation Programming Guide
里面负责协调多个动画原子更新显示操作。事务支持嵌套使用。核心动画支持两种事务:隐式事务和显式事务。在图层的动画属性被一个线程修改,同时该线程下次迭代的时候自动提交该修改的时候隐式事务自动创建。显式事务发生在程序在修改动画属性之前给 CATransaction 发送了一个开始消息,在动画属性
修改之后提交该消息。 事务管理将会在后面的“事务”部分详细介绍。