iOS - 向前触摸另一个视图

时间:2016-01-28 00:33:41

标签: ios cocoa-touch uikit uigesturerecognizer

此问题存在类似的SO Question,但遗憾的是没有提供合适的答案。

我有一个谷歌地图视图(GMSMapView),它完全由透明的兄弟视图覆盖,该视图充当缩略图图像的容器。缩略图是容器视图的子视图,而不是地图视图。这些子视图随机散布在地图上,因此部分隐藏了地图表面的部分。

点击其中一个缩略图会触发到另一个VC的segue,该VC会显示图像的缩放视图。

问题:

鉴于这些缩略图位于地图的顶部,如果手势与其中一个缩略图相交,它们会阻止正常的地图手势发生。例如,如果用户希望捏缩放,旋转或平移地图并且他/她的一个手指开始超出缩略图,则缩略图会截取触摸。

非起动器:

  • 显然,我无法在缩略图上将userInteractionEnabled设置为false,因为我需要检测点按手势以触发segue。
  • 我不认为我可以在缩略图视图上使用UIView的hitTest:withEvent和pointInside:withEvent方法自定义响应者链,因为它们不在视图层次结构中与地图相同的分支视图和调度逻辑取决于手势的类型(我认为此时不可用 - 一旦选择了适当的视图来接收事件,就会调用touchesBegan等)。如果我错了,请纠正我......

尝试解决方案:

鉴于上述情况,我尝试的策略是使用透明的触摸拦截器视图覆盖视图控制器中的所有其他视图"。此视图的唯一目的是接收所有触摸消息 - 通过覆盖touchesBegan(),touchesMoved(),touchesEnded() - 并根据需要将它们分派给其他视图。

换句话说,根据识别的手势类型(点击与其他),我可以调用适当的目标视图(缩略图或地图中的任何一个)touchesBegan(),touchesMoved(),通过转发 touches event 参数直接touchesEnded()方法。

不幸的是,虽然这在目标视图是简单的UIView时有效,但似乎大多数UIView子类(包括GMSMapView)都不允许以这种方式转发触摸事件。如下面的article所述(参见“诱人的非解决方案”一节)。

非常感谢任何想法。

0 个答案:

没有答案