我正在构建的应用程序有一个全屏MKMapView
,上面放置了另一个UIView
子类,也是全屏且完全透明的。我希望 UIView 子类能够处理单点触摸手势,例如点击和单指拖动,并忽略其他任何内容。这将允许 MKMapView
使用其他方式进行交互,特别是通过禁用 3D 功能用两根手指平移/滚动。
我的问题是 MKMapView 不使用 touchesXXX:withEvent:
方法进行用户交互。因此,我无法在 View 上的这些方法中检测到触摸计数并转发到 map 。同样,hitTest:withEvent:
方法不能用于确定哪个 View 处理触摸,因为那里的 UIEvent
对象返回一组空触摸。
我考虑过让所有触摸向前通过 View 并使用手势识别器来处理事件,但我确实需要在覆盖 View 上进行单次触摸/拖动以对 map View 没有影响。
有没有办法根据触摸次数完成这种过滤?或者禁用 map View 上的单点触摸手势的方法?
最佳答案
解决这个问题其实很简单。
- 为 map View 提供一个完全填充的父 View
- 将父 View 的平移和点击手势识别器配置为仅响应一根手指触摸
- 在
MKMapView
上,将scrollEnabled
属性设置为NO
(IB 中的“允许滚动”复选框)
手势识别器允许您获取手势,将 scrollEnabled
设置为 NO
可防止 MapView 吞下平移手势。
示例项目在这里:https://github.com/Linux-cpp-lisp/sample-no-gesture-mapview
关于iOS - 过滤触摸并将其转发到 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26638325/