我想确定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的原因。因此,我无法使用上述链接技术。
问题:是否有可能可靠地确定动画当前是否正在播放?如果是这样,有哪些技巧可以确定这个?
答案 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;
}