我目前正在阅读苹果的核心动画指南 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreAnimation_guide/CreatingBasicAnimations/CreatingBasicAnimations.html#//apple_ref/doc/uid/TP40004514-CH3-SW16,我在其中找到了以下有关 iOS 中图层支持视图的段落:
如果要使用核心动画类来启动动画,则必须从基于视图的动画块内部发出所有核心动画调用。 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
s 必须放置在动画块内。
然而,我发现这显然是不真实的。具体来说,我已经使用 Core Animation 类成功地实现了显式动画UIView
动画块。
我是否误解了这段话,或者它已经过时了,还是其他原因?
一些附加说明:
我假设“UIView 类默认禁用图层动画,但在动画块内重新启用它们”是指+[UIView setAnimationsEnabled:]
方法。当我回到可以执行此操作的计算机时,我会检查是否+[UIView areAnimationsEnabled]
回报YES
or NO
.
该引用指的是支持视图的层。对于您自己创建和管理的独立层而言,情况并非如此。
iOS 上的每个视图都有一个层支持。当您更改视图的属性时,它会更改底层属性。默认情况下,该层将具有隐式动画,但该层“禁用”该行为,除非您位于 UIView 动画块内。这就是文档的该部分所指的内容。
您可以通过多种方式使用核心动画来为图层属性设置动画。最常见的是当您想要为属性设置动画时将动画对象添加到图层中,但您也可以通过actions
字典和styles
如果您总是想在属性更改时制作动画,请使用字典。对于支持视图的图层,最后两个也将被禁用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)