[layer removeAllAnimations] 调用时如何让动画视图停留在当前位置

Posted

技术标签:

【中文标题】[layer removeAllAnimations] 调用时如何让动画视图停留在当前位置【英文标题】:How to let animating view stay at the current position when [layer removeAllAnimations] called 【发布时间】:2012-04-19 17:51:40 【问题描述】:

如果有两个动画依次发生,我想删除第一个动画,并从当前位置开始第二个动画。在将第二个动画添加到图层之前,我使用 [layer removeAllAnimations] 取消了第一个动画,图层总是回到初始位置。我知道这是 removeAllAnimations 的默认操作,但我想知道是否有任何方法可以将图层设置为保持当前位置。 非常感谢。

更新—— 我通过获取presentationLayer位置并将其分配给模型层位置来完成此操作。而且我也用 - (void)animationDidStop:(UIAnimation*)动画完成:(BOOL)flag; 检查动画是否完成。

【问题讨论】:

您不必致电removeAllAnimations(如果您担心内存泄漏)。无论如何:animation.fillMode = kCAFillModeForwards; animation.removedOnCompletion = NO; 通常会成功。 谢谢 rokjarc。是的,你是对的,但我想做的是在第一个动画完成之前取消它并开始第二个动画。我通过获取presentationLayer位置并将其分配给模型层位置来完成此操作。之后,我还修改了 animationDidStop 委托方法来检查动画是否停止。 【参考方案1】:

你可以使用:myView.frame = [[myView.layer presentationLayer] frame]

【讨论】:

以上是关于[layer removeAllAnimations] 调用时如何让动画视图停留在当前位置的主要内容,如果未能解决你的问题,请参考以下文章

removeAllAnimations 不适用于连续调用的动画

removeAllAnimations 不起作用后添加动画

UIButton 心跳动画

线程 1:EXC_BREAKPOINT CALayer removeAllAnimations 消息发送到 deallocated

如何在 SwiftUI 中停止 Animation().repeatForever

停止动画不适用于图像视图