核心动画编程指南

核心动画编程指南

Core Animation 提供了一个通用系统,用于动画视图和应用程序的其他视觉元素。Core Animation 不能替代应用程序的视图。相反,它是一种与视图集成的技术,以提供更好的性能并支持为其内容制作动画。它通过将视图的内容缓存到可由图形硬件直接操作的位图中来实现此行为。在某些情况下,这种缓存行为可能需要重新考虑如何呈现和管理应用程序的内容,但大多数情况下,使用 Core Animation 却不知道它的存在。除了缓存视图内容之外,Core Animation 还定义了一种指定任意视觉内容、将该内容与视图集成并将其与其他所有内容一起动画化的方法。

可以使用 Core Animation 为应用视图和视觉对象的更改设置动画。大多数更改与修改视觉对象的属性有关。例如,可以使用 Core Animation 对视图位置、大小或不透明度的更改进行动画处理。当您进行此类更改时,Core Animation 会在属性的当前值和指定的新值之间进行动画处理。通常不会使用 Core Animation 每秒 60 次替换视图的内容,例如在卡通中。相反,使用 Core Animation 在屏幕上移动视图的内容,淡入或淡出该内容,将任意图形转换应用于视图,或更改视图的其他视觉属性。

核心动画基础

基于层的绘制模型

img

基于层的动画

图层对象的数据和状态信息与该图层内容在屏幕上的视觉呈现分离。这种解耦为 Core Animation 提供了一种插入自身的方法,并为从旧状态值到新状态值的变化设置动画。例如,更改图层的位置属性会导致 Core Animation 将图层从其当前位置移动到新指定的位置。对其他属性的类似更改会导致相应的动画。图 1-2说明了您可以在图层上执行的几种动画类型。

图层对象定义自己的几何图形

层的工作之一是管理其内容的视觉几何。视觉几何包含有关该内容的边界、其在屏幕上的位置以及图层是否以任何方式旋转、缩放或变换的信息。与视图一样,图层具有框架和边界矩形,您可以使用它们来定位图层及其内容。图层还具有视图没有的其他属性,例如锚点,它定义了发生操作的点。指定图层几何的某些方面的方式也不同于为视图指定该信息的方式。

图层使用两种类型的坐标系

图层使用基于点的坐标系单位坐标系来指定内容的位置。使用哪个坐标系取决于所传达信息的类型。当指定直接映射到屏幕坐标或必须相对于另一个图层指定的值(例如图层的position属性)时,将使用基于点的坐标。当值不应该与屏幕坐标绑定时使用单位坐标,因为它是相对于某个其他值的。例如,图层的anchorPoint属性指定了一个相对于图层本身边界的点,该点可以改变。

基于点的坐标最常见的用途之一是指定图层的大小和位置,您可以使用图层boundsposition属性来执行此操作。在bounds定义了层本身的坐标系,并且包括在屏幕上的层的大小。该position属性定义了图层相对于其父坐标系的位置。尽管图层具有frame属性,但该属性实际上是从boundsposition属性中的值派生而来的,并且使用频率较低。

图层boundsframe矩形的方向始终与底层平台的默认方向匹配。图 1-3显示了 iOS 和 OS X 上边界矩形的默认方向。在 iOS 中,边界矩形的原点默认在图层的左上角,在 OS X 中它在底部- 左角。如果您在应用的 iOS 和 OS X 版本之间共享 Core Animation 代码,则必须考虑这些差异。

img

img

三维变换矩阵

可以在三个维度上操作图层

每个图层都有两个变换矩阵,您可以使用它们来操作图层及其内容。的transform属性CALayer指定要应用于图层及其嵌入的子图层的变换。通常,当您想要修改图层本身时,您会使用此属性。例如,您可以使用该属性来缩放或旋转图层或临时更改其位置。该sublayerTransform属性定义了仅适用于子图层的附加变换,最常用于向场景内容添加透视视觉效果。

变换的工作原理是将坐标值与数字矩阵相乘,以获得表示原始点的变换版本的新坐标。因为 Core Animation 值可以在三个维度上指定,所以每个坐标点都有四个值,必须通过一个 4×4 的矩阵相乘,如图 1-7所示。在 Core Animation 中,图中的变换由CATransform3D类型。幸运的是,您不必直接修改此结构的字段来执行标准转换。Core Animation 提供了一整套用于创建缩放、平移和旋转矩阵以及进行矩阵比较的函数。除了使用函数操作转换之外,Core Animation 还扩展了键值编码支持,允许您使用键路径修改转换。有关您可以修改的键路径列表,请参阅CATransform3D 键路径

动画层内容

Core Animation 提供的基础设施可以轻松创建应用程序层的复杂动画,并扩展到拥有这些层的任何视图。示例包括更改图层框架矩形的大小、更改其在屏幕上的位置、应用旋转变换或更改其不透明度。使用 Core Animation,启动动画通常就像更改属性一样简单,但您也可以创建动画并显式设置动画参数。

有关创建更高级动画的信息,请参阅高级动画技巧

清单 3-1 隐式动画更改

theLayer.opacity = 0.0;

清单 3-2 显式动画更改

CABasicAnimation* fadeAnim = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeAnim.fromValue = [NSNumber numberWithFloat:1.0];
fadeAnim.toValue = [NSNumber numberWithFloat:0.0];
fadeAnim.duration = 1.0;
[theLayer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值