CoreAnimation编程指南(一)核心动画基础

什么是核心动画

核心动画是一个图形渲染和动画基础设施可在iOS和OS X,你使用的动画的看法和你的应用程序的其他视觉元素。核心动画,大部分的工作需要画出每一帧的动画是为你做的。所有您需要做的就是配置一些动画参数(如起点和终点)告诉核心动画开始。核心动画不休息,把最实际的绘图工作了板载图形硬件加速渲染。这种自动图形加速的结果在高帧速率和流畅的动画,而不增加CPU和减慢你的应用
如果你正在写的iOS应用程序,您使用的是核心动画无论你是否知道。如果你正在写的OS X应用程序,你可以利用非常小的努力核心动画。核心动画坐在UIKit和AppKit和紧密集成到工作流视图的Cocoa和Cocoa Touch。当然,核心动画也有接口,扩展你的应用程序的视图的能力暴露给你控制你的动画更细粒度的应用。

核心动画提供了动画视图和应用程序的其他视觉元素的通用系统。核心动画是一个不为你的应用程序的视图替换。相反,它是一种技术,集成视图来提供更好的性能和动画内容的支持。通过缓存视图为位图,可以由图形硬件的直接操作实现这一行为的内容。在某些情况下,这种缓存行为可能需要你重新思考你的现状和管理你的应用程序的内容,但大多数你使用核心动画都不知道它的存在的时候。除了缓存视图内容,核心动画也定义了一个方法来指定任意的视觉内容,整合内容与您的意见,并把它与一切。
你使用Core Animation动画更改您的应用程序的视图和视觉对象。大多数的变化涉及到修改你的视觉对象的属性。例如,你可以使用Core Animation动画改变视图的位置,大小,或不透明度。当你做出这样的改变,核心动画的动画属性的当前值和新值指定之间。你通常不使用核心动画替换期60次的内容,如卡通。相反,你使用核心动画移动视图的内容在屏幕上,褪色或内容,适用于任意的图形变换的角度,或改变视图的其他视觉属性。

核心动画和drawRect:的区别

大多数层不在你的应用程序做任何实际的绘制。相反,一层捕获的内容应用提供并将其缓存中的位图,它有时也被称为存储备份。当你随后更改图层的属性,你所做的一切都是变化着的层对象相关的状态信息。当变化触发动画,动画通过核心层的位图和状态信息的图形硬件,并使用新的信息绘制位图的工作。操纵硬件位图产生的动画比软件快。
CoreAnimation编程指南(一)核心动画基础_第1张图片
因为它操纵静态位图,分层图明显不同于传统的基于视图的画法。与基于视图的绘制,到视图本身往往导致调用视图的变化drawRect:方法重绘内容使用新的参数。但这样画是昂贵的因为它是用CPU主线程。核心动画的尽可能利用缓存位图在硬件实现相同或相似的效果,避免了这一费用

基于图层的动画

数据和状态信息从一层对象,图层的内容在屏幕上的视觉呈现的解耦。这种解耦给核心动画的方式干预和动画的变化从旧到新的状态值状态值。例如,改变层的位置属性导致核心动画层从当前位置移动到新的指定位置。其他性能类似的变化引起相应的动画。
CoreAnimation编程指南(一)核心动画基础_第2张图片
一个动画的过程中,核心动画所有的帧由帧绘制你的硬件。所有您需要做的是指定开始和结束点的动画,让核心动画做休息。你也可以指定自定义定时信息和动画参数的需要;然而,核心动画也提供了适当的默认值。

两种坐标系统

利用两层基于点的坐标系统和单元坐标系指定内容的位置。该坐标系统的使用取决于所传达的信息类型。基于点的坐标时使用指定的值直接映射到屏幕坐标或必须指定相对于另一个层,如层位置财产单元坐标时所使用的价值不应该与屏幕坐标是相对于其他一些价值。例如,层定位点属性指定一个点相对于该层本身的界限,可以改变。
最常见的用途在基于点的坐标是指定大小和位置的层,你使用层界限和位置性能这个界限定义了层本身的坐标系统,包括图层的屏幕尺寸。这个位置属性定义的层的位置相对于其父的坐标系统。虽然有一层帧产权,产权实际上是源自中的值界限和位置性能和不经常使用的
一层的取向界限和帧矩形始终与底层平台的默认方向。下图显示边界矩形在iOS和OS X在iOS默认方向的边界矩形的起源是在默认情况下,图层的左上角,和OS X是在左下角。如果你分享核心动画代码iOS和OS X版本的应用程序之间,你必须把这些差异考虑。

这个图也说明了iOS和OS X的坐标系的起点是不一样的。

层操作

每一层有两个变换矩阵可以用来操纵层及其内容。这个转型财产CALayer指定将要应用到层及其嵌入层。你通常使用此属性时,您要修改的层本身。例如,你可以使用属性来缩放或旋转层或暂时改变它的位置。这个sublayertransform属性定义额外的转换,只适用于子层和最常见的使用是一个场景的内容添加一个角度的视觉效果。
工作乘以坐标值通过数字矩阵得到新的坐标表示的原始分转换版本的转换。因为核心动画值可以在三个维度中指定,每个坐标点有四个值必须乘以一四行四列的矩阵。在核心动画,图中的变换由catransform3d类型幸运的是,你不需要修改这个结构的字段直接进行标准转换。核心动画提供了一套全面的函数来创建表,翻译,和旋转矩阵和矩阵做比较。除了操纵变换使用功能,核心动画延伸键值编码支持允许您修改变换使用关键路径。一列可以修改关键路径,看catransform3d关键路径。
CoreAnimation编程指南(一)核心动画基础_第3张图片
CoreAnimation编程指南(一)核心动画基础_第4张图片

层树

一个应用程序使用核心动画有三套层对象。每一组对象在你的应用程序的内容不同的角色出现在屏幕上:

  • 中的对象模型层树(或简单的“层树”)是你的应用程序提供最互动。在这棵树的对象模型对象存储目标值的任何动画。当你改变一个层的属性,可以使用这些对象之一。
  • 中的对象表示树包含任何运行动画的飞行中的价值。而层树对象包含一个动画的目标值,在表示树的对象反映当前值同时出现在屏幕上。你永远不应该修改此树中的对象。相反,你使用这些对象读取当前动画的值,或者创建一个新的动画开始在这些价值观。
  • 中的对象渲染树执行实际的动画和私人核心动画。

每一组对象组织成一个喜欢在你的应用程序的视图层次结构。事实上,对于一个应用程序,使其所有视图层,每棵树的初始结构相匹配的视图层次结构完全。然而,一个应用程序,可以添加额外的那层对象,层与视图层层次的需要。你可能的情况下,优化的内容不要求所有视图的开销,您的应用程序的性能做这个。图1-9显示在一个简单的iOS应用发现层击穿。在示例窗口包含的内容来看,它本身包含一个按钮和两个独立的层对象。每个视图都有一个相应的层对象构成的层次结构的一部分。
CoreAnimation编程指南(一)核心动画基础_第5张图片
CoreAnimation编程指南(一)核心动画基础_第6张图片

层和视图之间的关系

层不是你的应用程序的视图,你不能创建一个完全基于对象的可视化界面。为你的观点提供基础设施层。具体来说,层使它更容易和更有效的绘制和动画视图的内容和保持高的帧速率。然而,有许多事情层不做。层不处理事件,画的内容,参与响应链,或做很多其他的事情。因此,每一个应用程序,还必须有一个或多个视图来处理这些类型的相互作用。
在iOS中,每个视图是由一个相应的层对象支持的但在OS X中,你必须决定哪些应该有层次然而,你不需要这样做,还可以禁用层的情况下是不必要的和不必要的开销。层增加应用程序的内存开销但他们的利益往往利大于弊,所以最好在禁用层支持测试你的应用程序的性能。
当你使一个视图层的支持,你所创造的是被称为层支持的视图。在一层支持的视图,系统负责创建底层对象并保持那层与视图同步。所有的iOS视图层的支持,在OS X的多数是一样的。然而,在OS X中,你也可以创建一个层托管视图这是一个视图,你提供层对象。一层的托管,它需要放手的管理层的方法,而不修改它的响应变化。

最后

原文《Core Animation Programming Guide》。

你可能感兴趣的:(ios,动画)