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

Pro*_*ber 22 core-animation ios

每个人和每本书都声称CALayer中存在隐式动画.但是,每次我想验证到目前为止,我最终都会严格按照设定值进行验证.完全没有动画.

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

[theLayer setValue:[NSNumber numberWithFloat:M_PI * 1.1] forKeyPath:@"transform.rotation.z"];
Run Code Online (Sandbox Code Playgroud)

另一个:

CGRect currentBounds = theLayer.bounds;
currentBounds.size.width += 120.f;
[self.animatedLayer setBounds:currentBounds];
Run Code Online (Sandbox Code Playgroud)

视图包含一些东西,所以我可以看到变化.我看到了视觉上的变化,但作为一个坚硬的瞬间.完全没有动画.

因此,在撰写关于核心动画和隐式动画的内容时,要么所有这些书都是错误的并且考虑到旧的Mac OS X知识,要么我做错了.任何人都可以提供一个演示iPhone上隐式动画的工作示例吗?

Lil*_*ard 66

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

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

如果您需要为UIView不会为您执行的CALayer属性设置动画,则可以使用显式CAAnimation子类(例如CABasicAnimation).

  • 很棒的答案!我很好奇 - 你从哪里获得所有这些详细信息?我检查了很多书籍和来源,但他们缺乏这些细节. (2认同)