我有一个UIView动画(由touchesEnded:
事件调用),我想在允许更多用户输入之前完成执行。在动画被调用之前,我检查一个标志“isMoving
”以查看动画是否正在进行。然后我设置isMoving
到YES
并执行如下动画(是的,我知道这是不是块格式)...在UIView动画期间防止用户输入
- (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;
标志形同虚设。
任何帮助防止重复的动画将不胜感激。
完美!我一直在嘲笑我的头数超过我想要承认的时间!我一直在避免转换到这里显示的块格式,因为我有几个将不得不效仿。但现在我想这将是值得的!我欠你一杯啤酒。 – 2011-04-21 18:50:04
我编辑了我的答案,以非块方式向您展示。 – Christian 2011-04-21 18:54:18