如何确定当前是不是正在 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 中播放动画?的主要内容,如果未能解决你的问题,请参考以下文章