将UIControl的endTracking子类化为多点触控

时间:2014-11-08 18:53:31

标签: ios uikit multi-touch uicontrol

我正在通过继承UIControl并重写以下方法来创建自定义控件*:

  • - beginTrackingWithTouch:withEvent:
  • - continueTrackingWithTouch:withEvent:
  • - endTrackingWithTouch:withEvent:
  • - cancelTrackingWithEvent:

此控件将支持多点触控交互。具体地,一个或两个手指可以向下触摸,拖动一段时间,然后全部独立地触摸。

我的问题出现在这些多点触控事件的最后,endTrackingWithTouch:withEvent:。系统会在每个多点触控序列上对我的控件调用此方法一次,并在第一次触摸时调用它。这意味着将不再跟踪可能仍在拖动的第二次触摸。

这一系列动作就是这种现象的一个例子:

  1. 手指 A 触及。调用beginTracking
  2. 手指 A 拖延。重复调用continueTracking来更新我的控制权。
  3. 手指 B 触及。 beginTracking被称为。{/ li>
  4. 手指 A B 拖动。重复调用continueTracking来更新我的控制权。
  5. 手指 B 触及。 endTracking被称为。{/ li>
  6. 手指 A 拖延。没有方法被调用。
  7. 手指 A 触及。没有方法被调用。
  8. 问题在于此序列的最后三个步骤。 The documentation for UIControlendTrackingWithTouch:withEvent:以下内容:

      

    当给定事件的最后一次触摸完全结束时发送给控件,告诉它停止跟踪。

    然而在我看来,在上面的步骤5中手指 B 触及之后,给定事件的最后一次触摸尚未完全结束。最后一次触摸是手指 A


    *范围滑块,如果您必须询问。 但是你已经有很多开源范围的滑块了,。是的,没错,但是这个支持多点触控和自动布局。

1 个答案:

答案 0 :(得分:1)

我在使用多点触控的自定义控制中遇到了同样的问题 由于UIControl是继承自UIView的{​​{1}}的子类,因此可以随意使用:

UIResponder

方法

这些方法在- (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; 子类中工作正常。