ios - 通过 GMSMapView 拦截 UIView 上的触摸

标签 ios uiview uigesturerecognizer gmsmapview

我正在尝试将 UIView 覆盖在 google GMSMapView 上。目标是拦截滑动,以便了解何时手动移动 map 。 (我知道我可以检查 -mapView:willMove: 但无论 map 是以编程方式移动还是手动触摸,都会调用它)。我正在以编程方式在位置更新时重新居中 map ——因为谷歌不像苹果那样为你做这件事。就像那里的每个 map 程序一样,我想在用户手动移动 map 后立即停止以当前位置为中心。我能想到的捕获这种情况的唯一方法(无需切换到 mapkit 或等待 Google 添加到 API)是在它经过 map 上的 View 时捕获滑动。

澄清一下,我的问题是如何在谷歌地图上放置一个 View ,使其响应滑动并仍然允许该事件传递到 GMSMapView?

我的 map 和 interceptView 都是主视图的同级 subview 。 interceptView 有一个 gestureRecognizer,设置为不透明,不隐藏并且 userInteractionEnabled = YES。因此 interceptView 可以很好地接收触摸事件。但是下面的 map 不会移动。如果我设置 interceptView.userInteractionEnabled = NO, map 工作正常。

通过覆盖 touchesBegan 和调用 GMSMapView 的 touchesBegan 来“传递触摸”不会执行任何操作。覆盖 hitTest 似乎不是一个选项,因为我不能子类化 GMSMapView。有没有人这样做过?我知道这里有很多关于传递特定事件的内容。我想在两个 View 上处理一个特定事件,其中一个是 Google 的 map 层,我无法修改其代码。

最佳答案

mapView:willMove: 接收一个 bool “手势”,如果移动是由用户手势触发的,则为真,否则为假。因此,仅当“手势”为真时,您才能停止重新居中 map 。这样您就可以确定 map 是手动移动的。

关于ios - 通过 GMSMapView 拦截 UIView 上的触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18093602/

相关文章:

ios - View 框架变化对 subview 的影响

ios - 来自 XIB 的自定义 UIView 加载巨大的 subview

objective-c - Objective-C : Draw(Write) on Touch in a UIScrollView

iphone - 如何通过拖动边缘右角来增大或减小UIImageView的尺寸?

iOS 阻止向下滑动

ios - 如何在 ios swift5 中编码 firebase 时间戳?

ios - 为什么扩展中有一个私有(private)的?

ios - 为什么缓冲区需要在 NSInvocation 上被 __unsafe_unretained - getArgument :atIndex:?

ios - 如何在 **spriteKit** 中添加 UIView?

ios - UIView 子类及其 subview 的 IBAction