如何检查 CABasicAnimation 是不是已应用并正在运行?

Posted

技术标签:

【中文标题】如何检查 CABasicAnimation 是不是已应用并正在运行?【英文标题】:How to check if an CABasicAnimation is applied and running already?如何检查 CABasicAnimation 是否已应用并正在运行? 【发布时间】:2011-09-18 12:12:46 【问题描述】:

我创建了一个 CABasicAnimation 并将其应用到这样的图层:

[rotatedLayer addAnimation:rotationAnimation forKey:@"transform.rotation.z"];

如何检查 rotateLayer 是否已经在 transform.rotation.z 路径上设置动画?

【问题讨论】:

【参考方案1】:

检查[rotatedLayer animationForKey:@"transform.rotation.z"];的返回值。

【讨论】:

它的快速转换是-rotatedLayer.animation(forKey: "transform.rotation.z")【参考方案2】:

您可以设置一个ivar,例如:

BOOL _animationRunning;

并将动画的委托设置为您所在的类并实现功能:

animationDidStart:(CAAnimation *)anim
animationDidStop:(CAAnimation *)anim finished:(BOOL)flag

并在这些回调中翻转布尔值。 Ole 的方法也可以,但是如果您将 beginTime 设置为具有延迟或将动画包装在 CAAnimationGroup 中以创建延迟(例如CAKeyframeAnimation delay before repeating),那么即使不是实际上是“动画”。

【讨论】:

我使用了一个计数器,它在animationDidStart 中增加,在animationDidStop 中减少。如果为零 - 不再运行动画 =]

以上是关于如何检查 CABasicAnimation 是不是已应用并正在运行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在动画 CABasicAnimation 时改变速度

如何使用 CABasicAnimation 更改 Frame.size

如何正确设置 CABasicAnimation(开始)时间?

如何在动画CABasicAnimation时改变速度

如何在 CABasicAnimation 结束之前重置它?

如何在动画开启时更改 CABasicAnimation 的 toValue/fromValue