Core Animation

来源:互联网 发布:鲁迅作品 知乎 编辑:程序博客网 时间:2024/05/17 05:53

iOS 提供了一系列的图形图像技术,这是建立动人的视觉体验的基础。特定的框架—处理 2D,3D 和动画效果—能够让您的程序访问 iPhone 和 iPod touch 卓越的图形功能。

Core Animation

Core Animation

基于合成独立图层的简单编程模型,您可以使用 Core Animation 来建立具有动画效果的用户体验。动画是按定义好的关键步骤创建的,步骤描述了文字层、图像层和 OpenGL ES 图形是如何交互的。Core Animation 在运行时按照预定义的步骤处理,平稳地将视觉元素从一步移至下一步,并自动填充动画中的过渡帧。

iOS中的许多功能,例如 Dock,Time Machine 和 QuickTime 播放器,都是依靠 Core Animation 设计了它们精美的用户界面。使用 Core Animation,您也可以创建出电影一般的用户体验—界面元素在屏幕上平滑移动,具有淡入淡出效果,并且编写几行代码就可以添加新的视觉效果。

Core Image

简单地说,Core Image 就是“图像让一切变得简单”的验证。它可以让您轻松地创建能够自动利用现代 GPU 硬件优势的高性能图像处理解决方案。Core Image 使用浮点像素处理管道,非常适合处理高比特深度的图像;它包含了 100 多个内置的过滤效果,例如色彩效果,扭转和变换。您甚至可以通过编写自定义的 Image Units 来扩展 Core Image,使其为您提供独特的功能。

Quartz Composer

Quartz Composer 是 Xcode 提供的一种可视化编程环境,能够让您快速创建复杂的活动图形组件,而无需编写代码。只需要简单地将图形处理功能的基本组件连接在一起,您就可以快速地设计动态的可视化效果,例如,将图像和实时信息与视频录像相结合。完成组件的设计之后,您可以使用 Cocoa 绑定将其嵌入您的应用程序。Quartz Composer 同样也是您开发 Image Units 和 OpenCL 内核的利器。

Quartz

Quartz 主要从两方面为应用程序提供基本的图形服务:Quartz 2D 图形 API 和 Quartz Extreme 窗口环境。Quartz 2D 强劲的图形处理能力基于可移植文档格式(PDF),能够提供专业水准的 2D 图形功能,如贝赛尔曲线,变换和渐变等。作为一块高级的“视觉混合板”,Quartz Extreme 管理应用程序在屏幕上的呈现,并提供全面支持透明性、反应灵敏的 GPU 加速窗口。

OpenGL

Open GL

OpenGL 是 Mac OS X 中采用硬件加速的图形的基础,它为 Core Animation,Core Image 和 Quartz Extreme 提供加速功能。同时它也是创建大部分 3D 应用程序—包括游戏,动画软件和医学成像产品—所用到的工业标准图形 API。Mac OS X 中的 OpenGL 基于一种高效的多线程架构,支持运行时刻优化,资源虚拟化,并支持 ATI,Intel 和 NVIDIA 生产的图形处理器。

iOS 提供了一系列的图形图像技术,这是建立动人的视觉体验的基础。特定的框架—处理 2D,3D 和动画效果—能够让您的程序访问 iPhone 和 iPod touch 卓越的图形功能。

OpenGL ES

Open GL ES

带有硬件加速的 OpenGL ES API 可利用 iPhone 和 iPod Touch 的强大的图形处理能力。OpenGL ES 具有比其桌面版本更加简单的 APL,但使用了相同的核心理念,包括可编程着色器和其他能够使您的 3D 程序或游戏脱颖而出的扩展。

Quartz 2D

Quartz 2D 是 iOS 下强大的 2D 图形 API。它提供了专业的 2D 图形功能,如贝赛尔曲线,变换和渐变等。使用 Quartz 2D 来定制接口元素可以为您的程序带来个性化外观。由于 Quartz 2D 是基于可移植文档格式 (PDF) 的图像模型,因此显示 PDF 文件也是小菜一碟。

QuickTime

Quicktime for Multimedia

QuickTime 和 QTKit 框架为 Mac OS X 上基于时间的媒体操作提供了强大的服务,它们能为您的应用程序添加音频和视频的播放,录制和编码能力。QuickTime 采用基于标准的 H.264 编解码器,能够以极低的数据传输速率提供令人叹为观止的视频质量,不仅如此,它还支持许多其它主要的音频和视频文件格式。

独立的分辨率

iPhone 4 高像素密度 Retina 屏可让任意尺寸的文本和图像都显得平滑流畅。如果需要支持早期的 iPhone,则可以使用 iOS SDK 中的独立分辨率,它可让应用程序运行于不同屏幕分辨率环境。您只需要对应用程序的图标、图形及代码稍作修改,便可确保它在各种 iOS 设备中都居极好的视觉效果,并在 iPhone 4 设备上将达到最佳。

照片库

应用程序可以通过 UIKit 访问用户的照片库。例如,可以通过照片选取器界面浏览用户照片库,选取某张图片,然后再返回应用程序。能够控制是否允许用户对返回的图片进行拖动或编辑。另外,UIKit 还提供相机接口。通过该接口,应用程序可直加载相机拍摄的照片。


Core Animation是一个Objc类库,用于处理图像渲染,投射和动画。

它提供以下功能:

通过简单的编程模型提供高性能的合成效果。

基于熟悉的视图抽象,可以使用树状的对象体系创建复杂的用户界面

轻量的数据结构。可以同时对上百个层进行展示和动画。

抽象的动画接口,能够让动画运行在独立的线程。一旦动画配制完毕并启动后,Core Animation将负责它的运行和桢速。

提升应用程序性能。程序只需要在变化时重画。将应用程序在resize时需要做的处理降到最低并提供layout服务层,Core Animation让你不再需要手动处理桢速。

灵活的layout管理器模型,自带的管理器能让你指定层和其兄弟层的相对位置和大小。

使用 Core Animation,开发者不再需要底层图形接口就可以创建高性能的动态用户界面了。

Core Animation类体系

images/lk_class_hierarchy.jpg

Core Animation类图Core Animation的类可分为以下几组:

提供展示的内容的Layer类

Animation 和 timing 类

Layout 和 constraint 类

将多个修改合成一个原子更新操作的事务类

基本的 Core Animatin 类包含在 Quartz Core 框架中,也有另外的layer类在其他框架中定义。下图展示了 Core Animation 的类体系。

CALayer

CALayer 是Core Animation的基础,它的作用类似于 NSView 。每一个 CALayer 可以拥有一个父层和多个子层,由此形成一个树状结构的体系,叫做 layer tree。

层从后往前的顺序进行渲染,子层基于和父层相对的局部坐标系统。还可以对层进行矩阵转换以实现复杂的展示效果.

在 CALayer 中,除了继承还有多种方式可以为它提供显示的内容,这一点有别于其他视图类:

把层的 content 属性设置为Core Graphics image,或者代理

提供代理对Core Graphics image context进行画图

设置层公用的一些可视化属性,比如背景色,透明度等

Subclassing CALayer and implementing any of the above techniques in a more encapsulated manner.

动画和时间函数

层的很多可视属性都可以产生隐式动画,这些属性称为可动画属性,修改层的可动画属性自动就会产生从当前值变化到目标值的动画,比如设置层的hidden属性为YES,就会产生一个淡出的动画。大部分可动画属性都有默认的动画,这些动画也是可以定制的。

可动画属性也可以进行显式动画,要创建显式动画你可以创建Core Animation动画类的实例并指定视觉效果,显式动画不会修改层对象的属性值,它仅仅是展示动画效果而已。

Core Animation既提供基本动画也提供关键桢动画,你可以对层的整个内容进行动画也可以对部分属性进行动画。所有动画类都继承自抽象类 CAAnimation 。 CAAnimation 遵守 CAMediaTiming 协议,可以对动画进行简单的时长,速度,重复次数控制。它还遵守 CAAction 协议,可以让动画在层触发action时启动.

动画类还定义了描述动画速度的基于简单bezier曲线的时间函数。比如ease-out时间函数会让动画在快结束的时候减速。

Core Animation提供了许多或具体或抽象的动画类:

CATransition 提供作用于整个层的转换效果。你还可以通过自定义的Core Image filter扩展转换效果。

CAAnimationGroup 可以打包多个动画对象并让他们同时执行。

CAPropertyAnimation 支持基于属性关键路径的动画。

CABasicAnimation 对属性做简单的插值

CAKeyframeAnimation 对关键桢动画提供支持。指定需要动画属性的关键路径,一个表示每一个阶段对应的值的数组,还有一个关键桢时间和时间函数的数组。动画运行时,依次设置每一个值的指定插值。

Layout管理类

Mac OS X 的 Core Animation 还提供更灵活的机制可以让你自己编写自定义的 layout 管理器。

Core Animation 的 CAConstraint 类是个layout管理器,它根据你指定的约束条件对子层进行排列。每一个约束条件(封装在 CAConstraint 类的实例中)描述层和兄弟层或父层之间的几何属性的关系。

事务管理类

对可动画属性的任何修改都应该在事务中完成。 CATransition 类负责将多个动画操作打包成原子更新操作然后执行。支持嵌套事务。

Core Animation 支持两种事务:隐式和显式。在当前没有事务的情况下对可动画属性进行修改会自动创建一个隐式的事务,在当前线程下一次迭代时自动提交。要创建显式事务,在对层进行修改之前给 CATransition 类发一个 begin 消息,修改后再发一个 commit 消息。

0 0
原创粉丝点击