菜鸟教程小白 发表于 2022-12-12 09:48:56

ios - 如何确保只有一个操作响应用户输入而运行?


                                            <p><p>假设一个应用有两个按钮,每个按钮都会启动一个动画(例如,推送或其他标准 segue 或自定义动画)。如果用户“同时”按下两个按钮,你如何阻止两个动画同时发生?好吧,首先我尝试了:</p>

<pre><code>[ setUserInteractionEnabled:NO];
</code></pre>

<p>但这并不能解决问题。 (也许 <code>userInteractionEnabled</code> 没有立即级联到 subview ?)</p>

<p>然后我尝试了:</p>

<pre><code>[ beginIgnoringInteractionEvents];
</code></pre>

<p>这确实解决了问题,<em>除了</em>如果你一个接一个地快速按下两个按钮<em>非常</em>(基本上用两根手指同时按下两个按钮),然后您会同时发生两个动画,这会导致我的应用出现问题。也许这两个事件在我的代码运行 <code>-beginIgnoringInteractionEvents</code> 被调用之前已经触发?</p>

<p>立即停止任何其他点击事件的可靠方法是什么?或者清除已经开始的那些。我在整个应用程序中都遇到了这个问题 - 按下两个按钮(或点击表格单元格等)很快就会触发两个事件并弄乱动画。</p>

<p>有什么想法吗?对于 iOS 应用中的这个问题,人们会怎么做?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>触摸处理在 iOS 中异步完成,以确保设备响应。这意味着处理程序可能在运行之前排队,这就是您对 <code>beginIgnoringInteractionEvents</code> 的调用被忽略的原因。</p>

<p>最简单的解决方案是简单地创建一个全局变量,让交互独占您自己。</p>

<pre><code>@interface UIApplicaiton(AnimationsInProgress)

- (BOOL)isAnimationInProgress;
- (void)setAnimationInProgress:(BOOL)value;

@end
</code></pre>

<p>以及实现:</p>

<pre><code>@implementation UIApplication(AnimationsInProgress)
{
    BOOL _isAnimationInProgress;
}

- (BOOL)isAnimationInProgress {
    return _isAnimationInProgress;
}

- (void)setAnimationInProgress:(BOOL)value {
    _isAnimationInProgress = value;
}
</code></pre>

<p>在动画操作的顶部使用它就像 <code>beginIgnoringInteractionEvents</code> 一样:</p>

<pre><code>if ([ isAnimationInProgress)
    return;
[ setAnimationInProgress:YES];

[UIView animate .... completion:^{
    [ setAnimationInProgress:NO];
}];
</code></pre>

<p>由于没有像触摸事件和 <code>beginIgnoringInteractionEvents</code> 这样的竞争条件,这将满足您的目的。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何确保只有一个操作响应用户输入而运行?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15615719/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15615719/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何确保只有一个操作响应用户输入而运行?