用户可以用滑动手势启动动画。我想阻止对动画的重复调用,以确保动画一旦启动,它就不能再次启动,直到它完成 - 这可能发生在用户意外滑动多次的情况下。如何在Objective-C中可靠地阻止重复的动画调用?
我想大多数人使用布尔标志(BOOL isAnimatingFlag
)以底部显示的方式实现此控制。我之前在应用中做过很多次这样的事情 - 但我从未完全肯定我的国旗是否有我想要的价值,因为动画使用了块,而且我不清楚我的动画完成了什么线程块正在运行。
这样(阻止重复动画)对于多线程执行可靠吗?
/* 'atomic' doesn't
* guarantee thread safety
* I've set up my flag as follows:
* Does this look correct for the intended usage?
*/
@property (assign, nonatomic) BOOL IsAnimatingFlag;
//…
@synthesize IsAnimatingFlag
//…
-(void)startTheAnimation{
// (1) return if IsAnimatingFlag is true
if(self.IsAnimatingFlag == YES)return;
/* (2) set IsAnimatingFlag to true
* my intention is to prevent duplicate animations
* which may be caused by an unwanted double-tap
*/
self.etiIsAnimating = YES;
// (3) start a new animation
[UIView animateWithDuration:0.75 delay:0.0 options:nil animations:^{
// animations would happen here...
} completion:^(BOOL finished) {
// (4) reset the flag to enable further animations
self.IsAnimatingFlag = NO;
}];
}
当用户按下按钮时,您可以禁用该按钮,直到动画结束,然后您可以再次启用该按钮。这应该可以解决你的问题。 – darren102 2013-03-01 14:33:21
如何在开始动画并在完成块中再次启用之前禁用按钮? – trojanfoe 2013-03-01 14:34:32
对不起朋友,动画实际上是由一个手势开始的,所以我应该删除“按钮”引用。我试图让事情变得简单,但却带来了混乱。编辑并更新。 – sean 2013-03-01 14:37:19