2014-10-29 43 views
0

我正在构建的应用程序有一个全屏幕MKMapView,其他UIView子类放在它上面,全屏以及完全透明。我希望UIView子类能够处理单点触摸手势,例如点击和单指拖动,并忽略其他任何操作。这将允许MKMapView使用其他方式进行交互,尤其是通过禁用3D功能使用两根手指进行平移/滚动。iOS - 过滤和转发子视图

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

我已经考虑让所有通过视图触摸前进,并用手势识别来处理事件,但我真的需要在覆盖视图中的单点触摸/拖拽到对地图视图没有影响。

有没有办法来完成基于触摸个数这个过滤?或者在地图视图中禁用单点触摸手势的方法?

+0

请问如果附加单个手指点击并拖动到识别的MapView自身工作的呢? – Linuxios 2014-10-29 18:50:15

+0

因此,通过替换它们,基本上覆盖/取消地图视图上的现有手势? – bgoers 2014-10-29 18:52:09

+0

是的。一秒钟,我在Xcode中查看。 – Linuxios 2014-10-29 18:55:20

回答

1

对此的解决方案其实很简单。

  • 给所述地图视图的父视图,它完全充满
  • 给父视图平移和点击配置为只以一个手指响应手势识别触摸
  • MKMapView,将scrollEnabled属性设置为NO (以下简称“允许滚动”复选框IB)

的手势识别器让你得到的手势,并设置scrollEnabledNO阻止的MapView吞食与p一个手势。

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

+0

非常好。我喜欢它,它非常接近。这只是引入了一个问题 - 当您禁用地图的3D功能时,双指手势允许地图视图滚动,这正是我期望做的(我想我应该指定我道歉) 。现在不幸的是,禁用滚动来吞咽单点触摸手势不允许双指盘滚动:( – bgoers 2014-10-29 19:17:59

+0

我目前正在测试一堆沿这些线来想出一些状态,允许使用手势功能。 – bgoers 2014-10-29 19:21:44

+0

@bgoers:好的,你可以尝试的一件事就是通过捕捉两个手指盘并计算偏移量来滚动自己,不太确定该怎么做,虽然 – Linuxios 2014-10-29 19:26:21