如何拦截 mapview 平移和缩放 (Swift 4)

How do I intercept mapview panning and zooming (Swift 4)

我正在尝试限制地图视图的平移和缩放,以保持在预定义的最大和最小相机高度以及边界框的四个角内。

The solutions proposed here,允许用户在区域外平移,然后使用 regionDidChangeAnimated 将它们平移回预定义的范围内。

我想知道是否有可能从一开始就不允许用户平移到边界之外。例如,我可以拦截 panning/zooming 手势并决定是否让它们继续吗?

我想我正在寻找类似于以下伪代码的东西:

func blockMapViewPanEvent(_ mapView: MKMapView){
    return mapView.visibleMapRect.isContainedWithin(topLeft, bottomRight)
}

我知道 MapBox 的 Swift SDK 实现了这一点,所以我想这是可能的。我可以用普通的 MapKit 做到这一点吗?

为清楚起见编辑:

我想限制平移和缩放,以便用户可以根据需要在边界框内平移和缩放。例如,如果边界框是德国,我希望用户能够在德国范围内平移和缩放,但他们永远看不到西班牙,因为西班牙在德国的边界框之外。

我不想在地图视图上禁用所有用户交互。

如果我的理解正确,你想禁用地图中的用户交互。

以下是地图视图中可用的几个选项。这些可能对你有帮助

mapView.zoomEnabled = false
mapView.scrollEnabled = false
mapView.userInteractionEnabled = false

如果您对这些有疑问,可以简单地在地图视图上放置一个透明视图

MapKit 现在可以在 iOS 13

您可以通过以下方式限制平移:

let boundaryRegion = MKCoordinateRegion(...) // the region you want to restrict
let cameraBoundary = CameraBoundary(region: boundaryRegion)
mapView.setCameraBoundary(cameraBoundary: cameraBoundary, animated: true)

并防止用户缩放到您感兴趣的区域之外: 让 zoomRange = CameraZoomRange(minCenterCoordinateDistance: 100, 最大中心坐标距离:500) mapView.setCameraZoomRange(缩放范围,动画:真)

您可以在 WWDC 2019 video at 2378 seconds 中看到一些限制。

参考资料