我试图限制地图视图的平移和缩放,以保持在预定义的最大和最小相机高度以及边界框的四个角内。
The solutions proposed here,允许用户平移该区域之外,然后使用regionDidChangeAnimated
将其平移回预定义的范围内。
我想知道是否有可能永远都不允许用户首先在边界之外平移。例如,我可以拦截平移/缩放手势并决定是否让它们继续吗?
我想我正在寻找类似以下伪代码的东西:
func blockMapViewPanEvent(_ mapView: MKMapView){
return mapView.visibleMapRect.isContainedWithin(topLeft, bottomRight)
}
我知道MapBox的Swift SDK可以做到这一点,所以我想这是可能的。我可以使用普通的MapKit来做到这一点吗?
为清晰起见进行编辑:
我想限制平移和缩放,以便用户可以在边界框内进行任意程度的平移和缩放。例如,如果边界框是德国的,则我希望用户能够在德国内平移和缩放,但是他们永远不会看到西班牙,因为西班牙在德国边界框之外。
我不想在地图视图上禁用所有用户交互。
答案 0 :(得分:0)
如果我对您的理解正确,则希望在地图中禁用用户交互。
以下是地图视图中可用的几个选项。这些可能对您有帮助
mapView.zoomEnabled = false
mapView.scrollEnabled = false
mapView.userInteractionEnabled = false
如果您对此有疑问,可以在地图视图上方放置透明视图
答案 1 :(得分:0)
您可以使用以下方式限制平移:
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中看到一些局限性。