如何截取地图视图的平移和缩放(雨燕4)

时间:2018-11-23 05:14:54

标签: ios swift mapkit mkmapview uigesturerecognizer

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

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

我想知道是否有可能永远都不允许用户首先在边界之外平移。例如,我可以拦截平移/缩放手势并决定是否让它们继续吗?

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

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

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

为清晰起见进行编辑:

我想限制平移和缩放,以便用户可以在边界框内进行任意程度的平移和缩放。例如,如果边界框是德国的,则我希望用户能够在德国内平移和缩放,但是他们永远不会看到西班牙,因为西班牙在德国边界框之外。

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

2 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,则希望在地图中禁用用户交互。

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

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

如果您对此有疑问,可以在地图视图上方放置透明视图

答案 1 :(得分:0)

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,         maxCenterCoordinateDistance:500)     mapView.setCameraZoomRange(zoomRange,动画:true)

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

参考文献