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: 方法?
UIScrollview touchesbegin,touchesmoved,touchesendactions