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

什么是核心动画

核心动画是一个图形渲染和动画基础设施可在iOS和OS X,你使用的动画的看法和你的应用程序的其他视觉元素。核心动画,大部分的工作需要画出每一帧的动画是为你做的。所有您需要做的就是配置一些动画参数(如起点和终点)告诉核心动画开始。核心动画不休息,把最实际的绘图工作了板载图形硬件加速渲染。这种自动图形加速的结果在高帧速率和流畅的动画,而不增加CPU和减慢你的应用

如果你正在写的iOS应用程序,您使用的是核心动画无论你是否知道。如果你正在写的OS X应用程序,你可以利用非常小的努力核心动画。核心动画坐在UIKit和AppKit和紧密集成到工作流视图的Cocoa和Cocoa Touch。当然,核心动画也有接口,扩展你的应用程序的视图的能力暴露给你控制你的动画更细粒度的应用。

核心动画提供了动画视图和应用程序的其他视觉元素的通用系统。核心动画是一个不为你的应用程序的视图替换。相反,它是一种技术,集成视图来提供更好的性能和动画内容的支持。通过缓存视图为位图,可以由图形硬件的直接操作实现这一行为的内容。在某些情况下,这种缓存行为可能需要你重新思考你的现状和管理你的应用程序的内容,但大多数你使用核心动画都不知道它的存在的时候。除了缓存视图内容,核心动画也定义了一个方法来指定任意的视觉内容,整合内容与您的意见,并把它与一切。

你使用Core Animation动画更改您的应用程序的视图和视觉对象。大多数的变化涉及到修改你的视觉对象的属性。例如,你可以使用Core Animation动画改变视图的位置,大小,或不透明度。当你做出这样的改变,核心动画的动画属性的当前值和新值指定之间。你通常不使用核心动画替换期60次的内容,如卡通。相反,你使用核心动画移动视图的内容在屏幕上,褪色或内容,适用于任意的图形变换的角度,或改变视图的其他视觉属性。

核心动画和drawRect:的区别

大多数层不在你的应用程序做任何实际的绘制。相反,一层捕获的内容应用提供并将其缓存中的位图,它有时也被称为存储备份。当你随后更改图层的属性,你所做的一切都是变化着的层对象相关的状态信息。当变化触发动画,动画通过核心层的位图和状态信息的图形硬件,并使用新的信息绘制位图的工作。操纵硬件位图产生的动画比软件快。

因为它操纵静态位图,分层图明显不同于传统的基于视图的画法。与基于视图的绘制,到视图本身往往导致调用视图的变化drawRect:方法重绘内容使用新的参数。但这样画是昂贵的因为它是用CPU主线程。核心动画的尽可能利用缓存位图在硬件实现相同或相似的效果,避免了这一费用

基于图层的动画

数据和状态信息从一层对象,图层的内容在屏幕上的视觉呈现的解耦。这种解耦给核心动画的方式干预和动画的变化从旧到新的状态值状态值。例如,改变层的位置属性导致核心动画层从当前位置移动到新的指定位置。其他性能类似的变化引起相应的动画。

一个动画的过程中,核心动画所有的帧由帧绘制你的硬件。所有您需要做的是指定开始和结束点的动画,让核心动画做休息。你也可以指定自定义定时信息和动画参数的需要;然而,核心动画也提供了适当的默认值。

两种坐标系统

利用两层基于点的坐标系统和单元坐标系指定内容的位置。该坐标系统的使用取决于所传达的信息类型。基于点的坐标时使用指定的值直接映射到屏幕坐标或必须指定相对于另一个层,如层位置财产单元坐标时所使用的价值不应该与屏幕坐标是相对于其他一些价值。例如,层定位点属性指定一个点相对于该层本身的界限,可以改变。

最常见的用途在基于点的坐标是指定大小和位置的层,你使用层界限和位置性能这个界限定义了层本身的坐标系统,包括图层的屏幕尺寸。这个位置属性定义的层的位置相对于其父的坐标系统。虽然有一层帧产权,产权实际上是源自中的值界限和位置性能和不经常使用的

一层的取向界限和帧矩形始终与底层平台的默认方向。下图显示边界矩形在iOS和OS X在iOS默认方向的边界矩形的起源是在默认情况下,图层的左上角,和OS X是在左下角。如果你分享核心动画代码iOS和OS X版本的应用程序之间,你必须把这些差异考虑。

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

层操作

每一层有两个变换矩阵可以用来操纵层及其内容。这个转型财产CALayer指定将要应用到层及其嵌入层。你通常使用此属性时,您要修改的层本身。例如,你可以使用属性来缩放或旋转层或暂时改变它的位置。这个sublayertransform属性定义额外的转换,只适用于子层和最常见的使用是一个场景的内容添加一个角度的视觉效果。

工作乘以坐标值通过数字矩阵得到新的坐标表示的原始分转换版本的转换。因为核心动画值可以在三个维度中指定,每个坐标点有四个值必须乘以一四行四列的矩阵。在核心动画,图中的变换由catransform3d类型幸运的是,你不需要修改这个结构的字段直接进行标准转换。核心动画提供了一套全面的函数来创建表,翻译,和旋转矩阵和矩阵做比较。除了操纵变换使用功能,核心动画延伸键值编码支持允许您修改变换使用关键路径。一列可以修改关键路径,看catransform3d关键路径。

层树

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

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

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

层和视图之间的关系

层不是你的应用程序的视图,你不能创建一个完全基于对象的可视化界面。为你的观点提供基础设施层。具体来说,层使它更容易和更有效的绘制和动画视图的内容和保持高的帧速率。然而,有许多事情层不做。层不处理事件,画的内容,参与响应链,或做很多其他的事情。因此,每一个应用程序,还必须有一个或多个视图来处理这些类型的相互作用。

在iOS中,每个视图是由一个相应的层对象支持的但在OS X中,你必须决定哪些应该有层次然而,你不需要这样做,还可以禁用层的情况下是不必要的和不必要的开销。层增加应用程序的内存开销但他们的利益往往利大于弊,所以最好在禁用层支持测试你的应用程序的性能。

当你使一个视图层的支持,你所创造的是被称为层支持的视图。在一层支持的视图,系统负责创建底层对象并保持那层与视图同步。所有的iOS视图层的支持,在OS X的多数是一样的。然而,在OS X中,你也可以创建一个层托管视图这是一个视图,你提供层对象。一层的托管,它需要放手的管理层的方法,而不修改它的响应变化。

最后

原文《Core Animation Programming Guide》

时间: 07-02

CoreAnimation编程指南(一)核心动画基础的相关文章

iOS开发UI篇—核心动画(基础动画)

iOS开发UI篇—核心动画(基础动画) 一.简单介绍 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue 如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态.但

CoreAnimation编程指南

转自http://www.cocoachina.com/bbs/read.php?tid=124478 第一章      核心动画概念核心动画是一套包含图形绘制,投影,动画的Objective–C类集合.它通过开发人员所熟悉的应用程序套件和Cocoa Touch视图架构的抽象分层模式,同时使用先进的合作效果提供了一套流畅的动画.动态的动画接口很难创建,但是核心动画通过提供如下接口使这些创建起来变得更加简单:简单易用的高性能混合编程模型.类似视图一样,你可以通过使用图层来创建复杂的接口.轻量级的数

核心动画基础动画(CABasicAnimation)关键帧动画

1.在iOS中核心动画分为几类: 基础动画(CABasicAnimation) 关键帧动画(CAKeyframeAnimation) 动画组(CAAnimationGroup) 转场动画(CATransition) 2.CAAnimation:核心动画的基础类,不能直接使用,负责动画运行时间,速度的控制,本身实现了CAMediaTiming协议 3.CAPropertyAnimation:属性动画也是基类(通过属性进行动画设置,注意是动画属性),不能直接使用. CABasicAnimation:

核心动画(基础动画)

一.简单介绍 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue 如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态.但在实质上,图层的属性值还是动画执行前的初

核心动画(基础动画)-转

一.简单介绍   CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值  随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐的变为toValue.  如果 fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态.但在实质上,图层的属性值还是动

(一二一)核心动画基础

核心动画基于QuartzCore框架,只能用于CALayer,可以实现3D效果,它在子线程中执行动画,不会阻塞主线程. 要实现核心动画,主要使用CABasicAnimation实现单步动画.使用CAKeyframeAnimation实现帧动画. 动画的主要属性有duration.keyPath.value.repeatCount等. 动画执行完毕后默认会复位,要取消复位,需要以下两行代码: anim.removedOnCompletion = NO; anim.fillMode = kCAFil

OC - 23.核心动画基础

概述 简介 核心动画提供了一组非常强大的动画API,通过该组API可以高效的实现绝大部分绚丽的动画效果 注意事项 核心动画的操作在子线程中执行,不会阻塞主线程 核心动画直接作用与CALayer对象上,不是UIView对象上 核心动画与UIView动画的区别 核心动画不会改变控件的frame属性,显示的只是一种假象 UIView动画会改变控件的frame属性,显示的是控件真实地frame属性 核心动画类 核心动画相关类的关系图 此图来源官方文档,不知为何右下角不是CAKeyframeAnimati

Swift动画编程指南-02 Swift动画是怎么炼成的

上一节我们看了几个很棒的例子,我们不禁会想.他们是怎么设计的,怎么从一个空白的画布变成一个完整的,美丽的动画.这些动画是如何产生的,是哪些属性被改变了.我们还要认真思考的是,每一个步骤到底发生了什么. 很多时候,我们都只要操纵位置,透明度,缩放就能形成很棒的动画. XY坐标属性(Position) 如果我们想在屏幕上移动一个对象的位置,那么我们只需要改变Position属性.在iOS的坐标系中,原点(0.0)在左上角.例如我们要做一个从底部上升的动画,只需要在动画之初设置其Y坐标大于将屏幕的措置

核心动画编程指南Core Animation Programming Guide - iOS

1 有关核心动画 1.1 概览 1.1.1 Core Animation 管理应用的内容 核心是 layer objects, 1.1.2 更改 layer 触发动画 Like views, layer objects have a bounds rectangle, a position onscreen, an opacity, a transform, and many other visually-oriented properties that can be modified. 更改这