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

Ios 如何确定当前是否正在UIView中播放动画?,ios,cocoa-touch,uitableview,uiview,core-animation,Ios,Cocoa Touch,Uitableview,Uiview,Core Animation,我想确定UITableView和其他视图当前是否正在使用核心动画执行某种类型的动画 在调查过程中,我发现了以下堆栈溢出问题和答案: 我已经验证了这种检查animationKeys属性的技术对于UISlider之类的控件非常有效,但是在UITableView动画期间尝试检查animationKeys时,NSArray计数始终为0。我甚至递归地检查视图层次结构中的每个视图和层的animationKeys,它们的计数都是0 在查看CALayer的addAnimation:forKey:selecto

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

在调查过程中,我发现了以下堆栈溢出问题和答案:

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

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


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

我会使用委托方法
animationDidStart

委托方法

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

  • (void)animationDidStart:(CAAnimation*)动画参数动画开始动画的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;
}