iOS 中隐式动画具体什么时候发生?

2024-04-03

每个人和每本书都声称 CALayer 中存在隐式动画。然而,到目前为止,每次我想验证这一点时,我都会以硬性捕捉到设定值告终。根本没有动画。

这是一个项目中没有发生任何其他事情的示例。我所做的就是创建一个视图,然后获取它的 CALayer 实例并执行一些应该隐式动画的操作。

[theLayer setValue:[NSNumber numberWithFloat:M_PI * 1.1] forKeyPath:@"transform.rotation.z"];

另一个:

CGRect currentBounds = theLayer.bounds;
currentBounds.size.width += 120.f;
[self.animatedLayer setBounds:currentBounds];

该视图当然包含一些内容,因此我可以看到更改。 我看到了视觉上的变化,但这是一个艰难的过程。根本没有动画。

因此,要么所有这些书都是错误的,并且在撰写有关核心动画和隐式动画的文章时考虑到了旧的 Mac OS X 知识,要么我做错了什么。谁能提供一个演示 iPhone 上隐式动画的工作示例?


UIKit 禁用隐式动画。更具体地说,与 UIView 关联的 CALayer 永远不会隐式动画。您自己创建且未与 UIView 关联的 CALayers 将使用正常的隐式动画机制。

如果您对其工作原理感兴趣,隐式动画会在正常的 -actionForKey: 查找之后发生。如果给定属性有 CAAction,则会使用它。否则,使用隐式动画。对于与 UIView 关联的 CALayer,UIView 实现-actionForLayer:forKey:委托方法,当不在 UIView 动画块中时,它总是返回[NSNull null]表示动作查找应在此停止。这会阻止隐式动画工作。在 UIView 动画块内部,它构造自己的操作来表示当前 UIView 动画设置。同样,这可以防止隐式动画。

如果您需要为 CALayer 属性设置动画,而 UIView 无法为您执行此操作,则可以使用显式 CAAnimation 子类(例如 CABasicAnimation)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 中隐式动画具体什么时候发生? 的相关文章

随机推荐