我对CALayer动画有一个奇怪的问题。导致此行为的行动清单:
CALayer
(CAKeyframeAnimation
)添加了不透明度动画。 FillMode为kCAFillModeForwards
或kCAFillModeRemoved
没有任何区别。X
时暂停动画,将CALayer
beginTime
和timeOffset
设置为{{1} (只是为了确定)并在该图层上调用0
。removeAllAnimations()
。问题是:图层具有正确的尺寸,不透明度动画仅在时间frame
之后,之前它已陷入完全不透明并且具有旧尺寸!这真的很奇怪,因为大小从未动画过,我改变了大小而没有动画应用于图层。
此外,所有超级层都有X
和beginTime == 0
。
为什么会这样?
答案 0 :(得分:0)
我发现了为什么失败了。如果布局发生变化,例如通过旋转屏幕,OS会通过“动作”自动将所有图层,UIView等设置为新状态。它们被添加到已经存在的动画中,完全忽略用户是否已经添加了自己的动画。问题是:这仅在最简单的情况下有效,如果您的动画有些复杂,动画就会坏掉。
要阻止操作系统干扰动画,只需将CALayer
actions
属性分配给
["bounds": NSNull(),
"contents": NSNull(),
"contentsGravity": NSNull(),
"contentsScale": NSNull(),
"fontSize": NSNull(),
"hidden": NSNull(),
"onLayout": NSNull(),
"onOrderIn": NSNull(),
"onOrderOut": NSNull(),
"position": NSNull(),
"speed": NSNull(),
"timeOffset": NSNull()]
阻止大多数操作被操作系统添加(此列表可能不完整)。
如果您阅读了Core Animation的教程和文档,则不会发现任何警告来寻找干扰您的东西的“动作”动画,因此这不是一个显而易见的解决方案,但它可以工作。