我有一个 UIView 动画(由touchesEnded:
事件调用),我想在允许更多用户输入之前完成执行。在调用动画之前,我会检查一个标志 " isMoving
" 以查看动画是否正在进行中。然后我设置isMoving
并YES
执行动画如下(是的,我知道它不是块格式)......
- (void) methodCalledFromViewControllerTouchesEnded {
if (isMoving == YES) {
NSLog (@"Don't start another animation!");
return;
}
isMoving = YES;
......
[UIView beginAnimations:@"move" context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:0.25f];
...
// DO MOVE STUFF
...
[UIView commitAnimations];
isMoving = NO;
}
然后我设置isMoving
为NO
这样后续调用touchesEnded:
不会在当前动画正在进行时启动另一个动画。但是,如果用户在初始动画正在进行时继续触摸,则此FAILS和动画会重复执行。
我想知道这是否可能与触摸事件在与动画不同的线程上处理的可能性有关。
我还在调试模式下运行并注意到动画实际上并没有“提交”,直到控制离开methodCalledFromViewControllerTouchesEnded
并返回到touchesEnded:
,从而使isMoving = NO;
标志无用。
任何有助于防止重复动画的帮助将不胜感激。