如何在 Mapbox MGLMapView 上使用自定义控件

How to use custom controls on Mapbox MGLMapView

我想在 Mapbox MGLMapView 上实现 KCFloatingActionButton(或类似的东西),但无法使按钮操作起作用。按钮识别初始触摸,颜色改变,但没有其他任何反应。我不确定地图是否窃取触摸或以某种方式具有更高的优先级。

检查视图层次结构显示 UIButton 和关联的 UIView 位于地图上方,所以我不知所措。我认为这可能是在按钮中使用了视图以及实际的 UIButton 对象,但我能够将 gestureRecognizer 附加到地图上的简单 UIView 没问题(除了地图仍然通过视图注册拖动和点击).香草 UIButton 对象也可以正常工作。

编辑:刚刚将视图交换到 MKMapView 并且按钮工作正常。

所以你每天都能学到新东西。真希望是昨天。

超级视图包含子视图。在我的例子中,MGLMapView 包含一个 KCFloatingActionButton(它本身派生自 UIView)。超级视图附有手势识别器。在我的例子中,mapView 具有通常与地图关联的常用点击和滑动。默认行为是这些手势 'not' 被子视图阻止,因此按钮的存在不会阻止超级视图识别它的手势。

通过采用 UIGestureRecognizerDelegate 并实施:

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    return false
}

我可以有选择地处理我的 'button' 如何处理从父视图派生的手势。当我阅读它时,UIButtons 默认为单次点击行为,但我的基于 UIView 的按钮没有。