gpt4 book ai didi

ios - 我如何确保代码不会被多次调用,但又不会像 dispatch_once 那样在整个程序执行过程中阻塞它?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:28:44 24 4
gpt4 key购买 nike

假设有一些事情我想确保它在执行时永远不会被调用。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com