此问题存在类似的SO Question,但遗憾的是没有提供合适的答案。
我有一个谷歌地图视图(GMSMapView),它完全由透明的兄弟视图覆盖,该视图充当缩略图图像的容器。缩略图是容器视图的子视图,而不是地图视图。这些子视图随机散布在地图上,因此部分隐藏了地图表面的部分。
点击其中一个缩略图会触发到另一个VC的segue,该VC会显示图像的缩放视图。
问题:
鉴于这些缩略图位于地图的顶部,如果手势与其中一个缩略图相交,它们会阻止正常的地图手势发生。例如,如果用户希望捏缩放,旋转或平移地图并且他/她的一个手指开始超出缩略图,则缩略图会截取触摸。
非起动器:
尝试解决方案:
鉴于上述情况,我尝试的策略是使用透明的触摸拦截器视图覆盖视图控制器中的所有其他视图"。此视图的唯一目的是接收所有触摸消息 - 通过覆盖touchesBegan(),touchesMoved(),touchesEnded() - 并根据需要将它们分派给其他视图。
换句话说,根据识别的手势类型(点击与其他),我可以调用适当的目标视图(缩略图或地图中的任何一个)touchesBegan(),touchesMoved(),通过转发 touches 和 event 参数直接touchesEnded()方法。
不幸的是,虽然这在目标视图是简单的UIView时有效,但似乎大多数UIView子类(包括GMSMapView)都不允许以这种方式转发触摸事件。如下面的article所述(参见“诱人的非解决方案”一节)。
非常感谢任何想法。