菜鸟教程小白 发表于 2022-12-13 03:14:49

ios - 子类化 UIControl 的 endTracking 以实现多点触控


                                            <p><p>我通过继承 UIControl 并覆盖以下方法来创建自定义控件*:</p>

<ul>
<li><code>- beginTrackingWithTouch:withEvent:</code></li>
<li><code>- continueTrackingWithTouch:withEvent:</code></li>
<li><code>- endTrackingWithTouch:withEvent:</code></li>
<li><code>- cancelTrackingWithEvent:</code></li>
</ul>

<p>此控件将支持多点触控交互。具体来说,一根或两根手指可能会向下触摸,拖动一段时间,然后向上触摸,所有这些都是独立的。 </p>

<p>我的问题出现在这些多点触控事件的末尾,在 <code>endTrackingWithTouch:withEvent:</code> 中。系统在我的控件上每个多点触控序列仅调用一次此方法,并且在发生的第一次触摸时调用它。这意味着将不再跟踪可能仍在拖动的第二次触摸。 </p>

<p>这一系列的 Action 就是这种现象的一个例子:</p>

<ol>
<li>手指<strong>A</strong>触地。 <code>beginTracking</code> 被调用。 </li>
<li>手指<strong>A</strong>在左右拖动。 <code>continueTracking</code> 被重复调用以更新我的控件。</li>
<li>手指<strong>B</strong>触地。 <code>beginTracking</code> 被调用。</li>
<li>手指 <strong>A</strong> 和 <strong>B</strong> 左右拖动。 <code>continueTracking</code> 被重复调用以更新我的控件。</li>
<li><strong>B</strong> 手指触碰。 <code>endTracking</code> 被调用。</li>
<li>手指<strong>A</strong>在左右拖动。不调用任何方法。</li>
<li>手指<strong>A</strong>触碰。不调用任何方法。</li>
</ol>

<p>问题在于此序列的最后三个步骤。 <a href="https://developer.apple.com/library/ios/documentation/uikit/reference/uicontrol_class/index.html#//apple_ref/occ/instm/UIControl/endTrackingWithTouch:withEvent:" rel="noreferrer noopener nofollow">The documentation for <code>UIControl</code></a>以下是 <code>endTrackingWithTouch:withEvent:</code>:</p>

<blockquote>
<p>Sent to the control when the last touch for the given event completely ends, telling it to stop tracking.</p>
</blockquote>

<p>但在我看来,在上述步骤 5 中手指 <strong>B</strong> 向上触摸之后,给定事件的最后一次触摸尚未完全结束。最后的触摸是手指<strong>A</strong>! </p>

<hr/>

<p>*一个范围 slider ,如果你一定要问的话。 <em>但是已经有很多开源范围 slider 了,</em> 你说。是的,没错,但是这个将支持多点触控和自动布局。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我在使用多点触控的自定义控件中遇到了同样的问题。<br/>
因为 <code>UIControl</code> 是 <code>UIView</code> 的子类,继承自 <code>UIResponder</code>,所以请随意使用:</p>

<pre><code>- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
</code></pre>

<p>方法。</p>

<p>这些方法在 <code>UIControl</code> 子类中工作正常。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 子类化 UIControl 的 endTracking 以实现多点触控,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/26820827/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/26820827/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 子类化 UIControl 的 endTracking 以实现多点触控