iOS - 过滤和转发子视图

时间:2014-10-29 18:47:50

标签: ios objective-c cocoa-touch

我正在构建的应用程序有一个全屏MKMapView,其上放置了另一个UIView子类,全屏也完全透明。我希望UIView子类能够处理单点触摸手势,例如点击和单指拖动,并忽略其他任何内容。这将允许MKMapView使用其他方式进行交互,尤其是通过禁用3D功能来平移/滚动两个手指。

我的问题是MKMapView不使用touchesXXX:withEvent:方法进行用户交互。因此,我无法在视图上检测这些方法中的触摸计数并转发到地图。同样,hitTest:withEvent:方法不能用于确定哪个视图处理触摸,因为UIEvent对象返回一组空触摸。

我考虑让所有触摸都通过视图向前移动并使用手势识别器来处理事件,但我真的需要在叠加视图上单击触摸/拖动才能对地图视图产生影响。

有没有办法根据触摸次数完成此过滤?或者一种在地图视图上禁用单点触控手势的方法?

1 个答案:

答案 0 :(得分:1)

解决方案实际上非常简单。

  • 为地图视图提供完全填充的父视图
  • 提供父视图平移并点击配置为仅响应一个手指触摸的手势识别器
  • MKMapView上,将scrollEnabled属性设置为NO(IB中的“允许滚动”复选框)

手势识别器允许您获取手势,并将scrollEnabled设置为NO可防止MapView吞下手势。

示例项目:https://github.com/Linux-cpp-lisp/sample-no-gesture-mapview