我目前正在阅读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]
是否返回YES
或NO
。
答案 0 :(得分:4)
该引用是指支持视图的图层。您自己创建和管理的独立层不是这样。
iOS上的每个视图都有一个图层支持。更改视图的属性时,它会更改基础图层属性。默认情况下,图层将具有隐式动画,但除了在UIView动画块内部时,图层“禁用”该行为。这就是文档的这一部分所指的内容。
有两种方法可以使用Core Animation为图层属性设置动画。当您想要为属性设置动画时,最常见的是将动画对象添加到图层,但如果您始终想要动画时,也可以通过actions
字典和styles
字典进行自定义。财产变化。对于支持视图的图层,也将禁用最后两个。