假设有一些东西我想确保在它已经执行时永远不会被调用。
以 UIScrollView
为例,其中每次发生缩放时都会调用 scrollViewDidScroll:
方法。如果我想在第一次调用时使用 [UIView animateWithDuration...]
,但不允许后续调用“覆盖”已经播放的动画,该怎么办?
dispatch_once
会完美地工作,如果不是因为它只允许它在每个程序执行时运行一次,而当我需要它运行多次时,只是不同时运行互相覆盖。
我该如何阻止后续调用将事情搞砸?
最佳答案
如果我理解的话,这样的事情应该可以工作(因为委托(delegate)总是从主线程调用):
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
static BOOL busy = NO;
if (!busy) {
busy = YES;
[UIView animateWithDuration:0.2 animations:^{
// your animations
} completion:^(BOOL finished) {
busy = NO;
}];
}
}
此代码确保动画一次只能发生一个。
关于ios - 如何确保代码不会被多次调用,但不会像dispatch_once 那样在整个程序执行中阻止它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21820450/