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

时间:2011-08-29 22:34:23

标签: ios cocoa-touch uitableview uiview core-animation

我想确定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 个答案:

答案 0 :(得分:3)

我会使用委托方法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;
}