- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我通过继承 UIControl 并覆盖以下方法来创建自定义控件*:
- beginTrackingWithTouch:withEvent:
- continueTrackingWithTouch:withEvent:
- endTrackingWithTouch:withEvent:
- cancelTrackingWithEvent:
此控件将支持多点触控交互。具体来说,一个或两个手指可能会向下触摸,拖动一段时间,然后向上触摸,所有这些都是独立的。
我的问题出现在这些多点触控事件的末尾,在 endTrackingWithTouch:withEvent:
中。系统在每个多点触摸序列中仅在我的控件上调用一次此方法,并且在发生的第一次触摸时调用它。这意味着将不再跟踪可能仍在拖动的第二个触摸。
这一系列 Action 是这种现象的一个例子:
beginTracking
被调用。 continueTracking
来更新我的控件。beginTracking
被调用。continueTracking
来更新我的控件。endTracking
被调用。问题在于此序列中的最后三个步骤。 The documentation for UIControl
表示 endTrackingWithTouch:withEvent:
的以下内容:
Sent to the control when the last touch for the given event completely ends, telling it to stop tracking.
但在我看来,在上面的第 5 步中手指 B 触摸之后,给定事件的最后一次触摸还没有完全结束。最后一次触摸是手指A!
*范围 slider ,如果您一定要问的话。 但是已经有很多开源范围 slider ,您说。是的,没错,但是这个将支持多点触控和自动布局。
最佳答案
我在使用多点触控的自定义控件中遇到了同样的问题。
因为 UIControl
是继承自 UIResponder
的 UIView
的子类,所以可以随意使用:
- (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;
方法。
这些方法在 UIControl
子类中运行良好。
关于ios - 为多点触控继承 UIControl 的 endTracking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26820827/
我是一名优秀的程序员,十分优秀!