Skip to content

Commit 47b444c

Browse files
committed
Merge pull request qunten#65 from mailworks/master
修改隐式动画章节部分错误
2 parents b663883 + 1af2618 commit 47b444c

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

7-隐式动画/隐式动画.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ Core Animation在每个*run loop*周期中自动开始一次新的事务(run l
228228

229229
我们来对颜色渐变的例子使用一个不同的行为,通过给`colorLayer`设置一个自定义的`actions`字典。我们也可以使用委托来实现,但是`actions`字典可以写更少的代码。那么到底改如何创建一个合适的行为对象呢?
230230

231-
行为通常是一个被Core Animation*隐式*调用的*显式*动画对象。这里我们使用的是一个实现了`CATransaction`的实例,叫做*推进过渡*
231+
行为通常是一个被Core Animation*隐式*调用的*显式*动画对象。这里我们使用的是一个实现了`CATransition`的实例,叫做*推进过渡*
232232

233233
第八章中将会详细解释过渡,不过对于现在,知道`CATransition`响应`CAAction`协议,并且可以当做一个图层行为就足够了。结果很赞,不论在什么时候改变背景颜色,新的色块都是从左侧滑入,而不是默认的渐变效果。
234234

8-显式动画/显式动画.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
> 如果想让事情变得顺利,只有靠自己 -- 夏尔·纪尧姆
44
5-
上一章介绍了隐式动画的概念。隐式动画是在iOS平台创建动态用户界面的一种直接方式,也是UIKit动画机制的基础,不过它并不能涵盖所有的动画类型。在这一章中,我们将要研究一下*显式动画*,它能够对一些属性做指定的自定义动画,或者创建非线性动画,比如沿着任意一条曲线移动。
5+
上一章介绍了隐式动画的概念。隐式动画是iOS平台上创建动态用户界面的一种简单方式,也是UIKit动画机制的基础,不过它并不能涵盖所有的动画类型。在这一章中,我们将要研究一下*显式动画*,它能够对一些属性做指定的自定义动画,或者创建非线性动画,比如沿着任意一条曲线移动。
66

77
##属性动画
88

@@ -215,7 +215,7 @@ self.colorLayer.backgroundColor = color.CGColor;
215215
216216
当使用`-addAnimation:forKey:`把动画添加到图层,这里有一个到目前为止我们都设置为`nil`的`key`参数。这里的键是`-animationForKey:`方法找到对应动画的唯一标识符,而当前动画的所有键都可以用`animationKeys`获取。如果我们对每个动画都关联一个唯一的键,就可以对每个图层循环所有键,然后调用`-animationForKey:`来比对结果。尽管这不是一个优雅的实现。
217217
218-
幸运的是,还有一种更加简单的方法。像所有的`NSObject`子类一样,`CAAnimation`实现了KVC(键-值-编码)协议,于是你可以用`-setValue:forKey:`和`-valueForKey:`方法来存取属性。但是`CAAnimation`有一个不同的性能:它更像一个`NSDictionary`,可以让你随意设置键值对,即使和你使用的动画类所声明的属性并不匹配。
218+
幸运的是,还有一种更加简单的方法。像所有的`NSObject`子类一样,`CAAnimation`实现了KVC(键-值-编码)协议,于是你可以用`-setValue:forKey:`和`-valueForKey:`方法来存取属性。但是`CAAnimation`有一个与众不同的特性:它更像一个`NSDictionary`,可以让你随意设置键值对,即使和你使用的动画类所声明的属性并不匹配。
219219
220220
这意味着你可以对动画用任意类型打标签。在这里,我们给`UIView`类型的指针添加的动画,所以可以简单地判断动画到底属于哪个视图,然后在委托方法中用这个信息正确地更新钟的指针(清单8.4)。
221221
@@ -310,7 +310,7 @@ self.colorLayer.backgroundColor = color.CGColor;
310310

311311
`CAKeyframeAnimation`是另一种UIKit没有暴露出来但功能强大的类。和`CABasicAnimation`类似,`CAKeyframeAnimation`同样是`CAPropertyAnimation`的一个子类,它依然作用于单一的一个属性,但是和`CABasicAnimation`不一样的是,它不限制于设置一个起始和结束的值,而是可以根据一连串随意的值来做动画。
312312

313-
*关键帧*起源于传动动画,意思是指主导的动画在显著改变发生时重绘当前帧(也就是*关键*帧),每帧之间剩下的绘制(可以通过关键帧推算出)将由熟练的艺术家来完成。`CAKeyframeAnimation`也是同样的道理:你提供了显著的帧,然后Core Animation在每帧之间进行插入
313+
*关键帧*起源于传动动画,意思是指主导的动画在显著改变发生时重绘当前帧(也就是*关键*帧),每帧之间剩下的绘制(可以通过关键帧推算出)将由熟练的艺术家来完成。`CAKeyframeAnimation`也是同样的道理:你提供了显著的帧,然后Core Animation在每帧之间进行插值
314314

315315
我们可以用之前使用颜色图层的例子来演示,设置一个颜色的数组,然后通过关键帧动画播放出来(清单8.5)
316316

@@ -578,7 +578,7 @@ self.colorLayer.backgroundColor = color.CGColor;
578578

579579
我们在第七章的例子中就已经用到过`kCATransitionPush`,它创建了一个新的图层,从边缘的一侧滑动进来,把旧图层从另一侧推出去的效果。
580580

581-
`kCATransitionMoveIn``kCATransitionReveal``kCATransitionPush`类似,都实现了一个定向滑动的动画,但是有一些细微的不同,`kCATransitionMoveIn`从顶部滑动进入,但不像推送动画那样把老土层推走,然而`kCATransitionReveal`把原始的图层滑动出去来显示新的外观,而不是把新的图层滑动进入。
581+
`kCATransitionMoveIn``kCATransitionReveal``kCATransitionPush`类似,都实现了一个定向滑动的动画,但是有一些细微的不同,`kCATransitionMoveIn`从顶部滑动进入,但不像推送动画那样把老图层推走,然而`kCATransitionReveal`把原始的图层滑动出去来显示新的外观,而不是把新的图层滑动进入。
582582

583583
后面三种过渡类型都有一个默认的动画方向,它们都从左侧滑入,但是你可以通过`subtype`来控制它们的方向,提供了如下四种类型:
584584

@@ -730,7 +730,7 @@ self.colorLayer.backgroundColor = color.CGColor;
730730
@end
731731
```
732732
733-
文档暗示过在iOS5(带来了Core Image框架)之后,可以通过`CATransition`的`filter`属性,用`CIFilter`来创建其它的过渡效果。然是直到iOS6都做不到这点。试图对`CATransition`使用Core Image的滤镜完全没效果(但是在Mac OS中是可行的,也许文档是想表达这个意思)。
733+
文档暗示过在iOS5(带来了Core Image框架)之后,可以通过`CATransition`的`filter`属性,用`CIFilter`来创建其它的过渡效果。然而直到iOS6都做不到这点。试图对`CATransition`使用Core Image的滤镜完全没效果(但是在Mac OS中是可行的,也许文档是想表达这个意思)。
734734
735735
因此,根据要实现的效果,你只用关心是用`CATransition`还是用`UIView`的过渡方法就可以了。希望下个版本的iOS系统可以通过`CATransition`很好的支持Core Image的过渡滤镜效果(或许甚至会有新的方法)。
736736

0 commit comments

Comments
 (0)