如何确定当前是不是正在 UIView 中播放动画?

Posted

技术标签:

【中文标题】如何确定当前是不是正在 UIView 中播放动画?【英文标题】:How can I determine if an animation is currently playing in UIView?如何确定当前是否正在 UIView 中播放动画? 【发布时间】:2011-08-29 22:34:23 【问题描述】:

我想确定 UITableView 和其他视图当前是否正在使用核心动画执行某种类型的动画。

在对此进行调查时,我发现了以下 Stack Overflow 问题和答案: how to tell if uiview is in middle of animation?

我已经验证了这种检查 animationKeys 属性的技术对于 UISlider 之类的控件非常有效,但是在 UITableView 动画期间尝试检查 animationKeys 时,NSArray 计数始终为 0。我什至甚至递归检查animationKeys 的视图层次结构中的每个视图和层,它们的计数都为 0。

在查看 CALayer 的 addAnimation:forKey: 选择器时,我发现可以使用 nil 键添加动画。这可能是 animationKeys 计数为 0 的原因。因此,我无法使用上述链接技术。

问题:是否有可能可靠地确定动画当前是否正在播放?如果是这样,有哪些技术可以确定这一点?

【问题讨论】:

【参考方案1】:

我会使用委托方法animationDidStart:

委托方法

animationDidStart:在动画开始其活动时调用 持续时间。

(void)animationDidStart:(CAAnimation *)theAnimation 参数 theAnimation 开始动画的 CAAnimation 实例。 可用性 适用于 ios 2.0 及更高版本。在 CAAnimation.h 中声明

或者,您可以查询presentationLayer并将其与模型层进行比较。例如:

CGPoint presentationPosition = myLayer.presentationLayer.position;
CGPoint modelPosition = myLayer.position;

BOOL animationInProgress = NO;

if (presentationPosition.x != modelPosition.x ||
    presentationPosition.y != modelPosition.y)

    animationInProgress = YES;

【讨论】:

以上是关于如何确定当前是不是正在 UIView 中播放动画?的主要内容,如果未能解决你的问题,请参考以下文章

让 UIView 动画通过 airplay 播放

UIView 动画在动画期间确定中心

如何创建自定义 UIView 动画

单击 XCUITest 中的按钮后,如何验证和断言是不是正在播放动画?

动画 UIView 帧 0 到 360 度作为歌曲进度条

在动画期间访问 UIView 的当前位置