iPhone UIView touchesMoved: withEvent: 不会在 UIView 上使用手势识别器调用

Posted

技术标签:

【中文标题】iPhone UIView touchesMoved: withEvent: 不会在 UIView 上使用手势识别器调用【英文标题】:iPhone UIView touchesMoved: withEvent: does not get called on UIView with gesture recognizers 【发布时间】:2012-04-26 01:30:19 【问题描述】:

我添加了一个UIView,它依赖于 TouchesMoved: 事件来拖动触摸。在同一个视图控制器中已经存在长按、点击、旋转和捏合手势识别器。我遇到了一个问题,即视图接收touchesBegan:touchesEnded: 事件,但没有移动任何触摸。

我的 touchesMoved 不被调用的问题是由手势识别器取消视图中的触摸引起的吗?我还涉及到滚动视图。这可能是罪魁祸首吗?

如果我无法使用 touchesMoved,这是最接近实现“触摸和移动”功能的手势。是点击还是平移手势识别器?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

默认情况下,手势在它们处于活动状态时会取消它们链接到的对象中的触摸。您可以通过将cancelsTouchesInView 属性设置为NO 来停止此行为。

【讨论】:

【参考方案2】:

将原始触摸处理与手势识别器混合可能会产生奇怪的行为,至少我无法让它稳定工作,它有点不稳定。在您的情况下,您可能只想在视图中添加一个拖动手势识别器 (UIPanGestureRecognizer) 来处理拖动。

您可以通过查看 UIGestureRecognizerDelegate 的 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: 来控制手势识别器在何种情况下触发的机制。

【讨论】:

完全同意。切换到手势识别器解决了我所有的问题。 我在使用 UIResponder 的 UITextField 中的子视图时也遇到了问题。文本字段一直在偷我的感觉。手势识别器修复了这个问题。

以上是关于iPhone UIView touchesMoved: withEvent: 不会在 UIView 上使用手势识别器调用的主要内容,如果未能解决你的问题,请参考以下文章

UIPanGestureRecognizer 是不是优先于 -touchesMoved: 方法?

iPhone - 检测触摸并取消它们?

UIScrollview touchesbegin,touchesmoved,touchesendactions

iOS 如何使用 touchesMoved 移动两个图像?

touchesbegin, touchesmoved, touchesended 问题

SetNeedsDisplay导致应用程序在TouchesMoved事件中崩溃