为什么文档表明CALayer动画必须在UIView动画块中?

时间:2015-01-22 19:17:08

标签: ios uiview core-animation calayer

我目前正在阅读Apple的Core Animation Guide,我在iOS中发现了以下关于图层支持视图的文章:

  

如果要使用Core Animation类来启动动画,则必须从基于视图的动画块中发出所有Core Animation调用。 UIView类默认禁用图层动画,但在动画块内重新启用它们。因此,您在动画块之外所做的任何更改都不会设置动画。

在报价下方,文档包含以下代码清单:

[UIView animateWithDuration:1.0 animations:^{
   // Change the opacity implicitly.
   myView.layer.opacity = 0.0;

   // Change the position explicitly.
   CABasicAnimation* theAnim = [CABasicAnimation animationWithKeyPath:@"position"];
   theAnim.fromValue = [NSValue valueWithCGPoint:myView.layer.position];
   theAnim.toValue = [NSValue valueWithCGPoint:myNewPosition];
   theAnim.duration = 3.0;
   [myView.layer addAnimation:theAnim forKey:@"AnimateFrame"];
}];

这意味着CALayer支持UIView上的隐式和显式动画必须放在动画块中。

然而,我发现这显然是不真实的。具体来说,我已经使用UIView动画块之外的核心动画类成功实现了显式动画。

我是否误解了这段话,或者它已经过时了,还是其他什么?


一些附加说明:

我假设" UIView类默认禁用图层动画,但在动画块中重新启用它们"是指+[UIView setAnimationsEnabled:]方法。当我回到可以执行此操作的计算机时,我会检查+[UIView areAnimationsEnabled]是否返回YESNO

1 个答案:

答案 0 :(得分:4)

该引用是指支持视图的图层。您自己创建和管理的独立层不是这样。


iOS上的每个视图都有一个图层支持。更改视图的属性时,它会更改基础图层属性。默认情况下,图层将具有隐式动画,但除了在UIView动画块内部时,图层“禁用”该行为。这就是文档的这一部分所指的内容。

有两种方法可以使用Core Animation为图层属性设置动画。当您想要为属性设置动画时,最常见的是将动画对象添加到图层,但如果您始终想要动画时,也可以通过actions字典和styles字典进行自定义。财产变化。对于支持视图的图层,也将禁用最后两个。