【发布时间】:2015-01-05 09:37:06
【问题描述】:
我通过继承 UIControl 并覆盖以下方法来创建自定义控件*:
- beginTrackingWithTouch:withEvent:- continueTrackingWithTouch:withEvent:- endTrackingWithTouch:withEvent:- cancelTrackingWithEvent:
此控件将支持多点触控交互。具体来说,一根或两根手指可能会向下触摸,拖动一段时间,然后向上触摸,所有这些都是独立的。
我的问题出现在这些多点触控事件的结尾,endTrackingWithTouch:withEvent:。系统在我的控件上每个多点触控序列仅调用一次此方法,并且在发生的第一次触摸时调用它。这意味着将不再跟踪可能仍在拖动的第二次触摸。
这一系列的动作就是这种现象的一个例子:
- 手指A触地。
beginTracking被调用。 - 手指A在左右拖动。
continueTracking被反复调用以更新我的控件。 - 手指B触地。
beginTracking被调用。 - 手指 A 和 B 左右拖动。
continueTracking被反复调用以更新我的控件。 - 手指B触碰。
endTracking被调用。 - 手指A在左右拖动。不调用任何方法。
- 手指A触碰。不调用任何方法。
问题在于此序列的最后三个步骤。 The documentation for UIControl 表示endTrackingWithTouch:withEvent: 的以下内容:
当给定事件的最后一次触摸完全结束时发送到控件,告诉它停止跟踪。
但在我看来,在上述步骤 5 中手指 B 向上触摸之后,给定事件的最后一次触摸尚未完全结束。最后的触摸是手指A!
*一个范围滑块,如果你一定要问的话。 但是已经有很多开源范围滑块了, 你说。是的,没错,但是这个将支持多点触控和自动布局。
【问题讨论】:
标签: ios uikit multi-touch uicontrol