如何判断uiview是否在animation中?

有什么办法可以判断一个uiview是否在animation的中间? 当我移动时,我打印出视图对象(注意有一个“animation”variables):

search bar should end editing: <UISearchBar: 0x2e6240; frame = (0 0; 320 88); text = ''; autoresize = W+BM; animations = { position=<CABasicAnimation: 0x6a69c40>; bounds=<CABasicAnimation: 0x6a6d4d0>; }; layer = <CALayer: 0x2e6e00>> 

当animation停止,我打印uiview(“animation”variables现在已经消失):

 search bar should end editing: <UISearchBar: 0x2e6240; frame = (0 0; 320 88); text = ''; autoresize = W+BM; layer = <CALayer: 0x2e6e00>> 

一个UIView有一个图层( CALayer )。 您可以发送animation密钥给它,它会给你一个密钥的数组,标识附加到图层的animation。 我想,如果有任何条目,animation(S)正在运行。 如果你想深入挖掘一下CALayer采用的CAMediaTiming协议 。 它会对当前animation做更多的信息。

实际上,animation被附加到底层的Core Animation CALayer类中

所以我想你可以检查myView.layer.animationKeys

我不确定这个问题的背景,但是我一直试图在开始第二个animation之前查看一个视图是否是animation,以避免跳过。 然而,有一个UIViewanimation选项UIViewAnimationOptionBeginFromCurrentState ,如果需要的话,将结合animation,以提供一个平滑的外观。 从而消除我的需要知道如果视图是animation。

animation关键技巧是一个难题。

animation完成后,有时可能会有一些animation键徘徊。

这意味着一个非animation层可以返回一组animation键,即使它不是实际的animation。

您可以通过将animation的removedOnCompletion属性设置为YES来确保animation键被自动删除。

例如

 CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"aPath"]; animation.removedOnCompletion = YES; 

如果您对所有应用于图层的animation执行此操作,将确保当图层不animation时,不存在animation键。

其中一些不适合我。 原因是这些animation是asynchronous的。

我所做的是定义一个属性

 @property BOOL viewIsAnimating; 

并在我的animation

 [UIView animateWithDuration:0.25 animations:^{ viewIsAnimating = YES; } completion:^(BOOL finished) { if (finished) { viewIsAnimating = NO; } }]; 

您可以按照这里的build议查询表示层即使没有animation,我的表示层也不匹配我的模型层