菜鸟教程小白 发表于 2022-12-13 05:16:21

ios - 在另一个正在触发时暂时禁用一个手势识别器


                                            <p><p>我有一个想要自然滚动的 <code>UITableView</code>。但是,我也有我自己的手势识别器,它被同时识别(通过从 <code>gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:</code> 返回 <code>YES</code>)。</p>

<p>在我的手势处理程序计算出某个点之后,我想<em>暂时停止</em>表格 View 处理其自身基础手势的手势变化。这是因为此时我正在调整表格 View 的大小,并且我不希望它在发生这种情况时滚动(但保持滚动到调整大小开始生效时的位置)。</p>

<p>我已经尝试在 <code>gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:</code> 中记录另一个手势识别器,它似乎可以识别正确的手势识别器,因为它显示为 <code>UIScrollViewPanGestureRecognizer</code>。然而,我在自己的处理程序中对那个识别器所做的一切似乎都没有任何效果。</p>

<p>有人会认为设置 <code>otherRecognizer.enabled = NO</code> 应该可以解决问题,但它没有任何效果。</p>

<p>也许表格 View 在我之前接收到它的手势事件,因此在那时禁用它没有任何效果,但即使那样你也会认为它会在下一次更改事件时被禁用,但事实并非如此。 </p>

<p>我被难住了。如何在不完全取消手势的情况下暂时阻止表格 View 接收/处理手势?</p>

<p><strong>更新:</strong></p>

<p>当我记录 <code>otherRecognizer</code> 时,它显示为 <code>UIScrollViewPanGestureRecognizer</code> 类型的对象,但是它的状态是 <code>Failed</code>。我还注意到实际上有很多对 <code>gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:</code> 的调用(甚至是多个 <code>UIScrollViewPanGestureRecognizer</code> 类型的调用),所以也许我只是在记录和禁用错误的调用。 .. 但是我如何确定我想要的是哪一个?</p>

<p><strong>更新 2:</strong></p>

<p>如果我在我自己的手势处理程序中的适当时刻设置 <code>tableView.panGestureRecognizer.enabled = NO</code>,它会让我走到一半——一旦我开始调整它的大小,表格就不再滚动了。但是,将其重新设置为启用不会重新激活手势,并且它不再处理任何进一步的滚动,直到新的手势开始。</p>

<p><strong>更新 3:</strong></p>

<p>我最终通过在手势期间手动调整 ScrollView 的内容偏移来“解决”这个问题。它似乎工作正常,但我仍然对真正的答案感到好奇。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>一个 UITableView 是一个 UIScrollView。 UIScrollView 有一个 <code>panGestureRecognizer</code> 属性。这是响应用户在表格 View 上移动手指的手势识别器。</p>

<p>但是,这与调整表格 View 大小时滚动位置的变化无关。用户什么都没做——你是。所以没有手势,也没有什么可以识别的。如果你想控制 ScrollView 在做什么,你需要<em>直接</em>控制它。您可以使用 UITableView 方法、UIScrollView 方法和 UIScrollView 委托(delegate)。</p>

<p>如果没有更清晰的问题陈述,很难进一步提出建议,但在我看来,您<em>确实</em>提出的问题的答案是您找错了树。但也许不是;也许您 <em></em> 打算调整表格 View 的大小,而您在问题中没有明确说明?在这种情况下,请尝试禁用 <code>panGestureRecognizer</code>。或者,更好的是,只是暂时关闭表格 View 的所有用户交互并在其他地方检测此手势。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在另一个正在触发时暂时禁用一个手势识别器,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/28356900/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/28356900/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在另一个正在触发时暂时禁用一个手势识别器