如何在MapKit中限制平移和缩小苹果地图的特定区域?

时间:2019-07-08 17:14:27

标签: ios swift mapkit panning

我目前正在制作一个带有地图的应用程序,该地图应仅关注特定位置。我希望用户无法缩小或平移该区域,以便他们将注意力集中在我放置在该区域上的图像叠加层上。

为了使该应用从我想要的位置开始,而不是从一些随机地图开始,我使用了Ray Wenderlich的教程:https://www.raywenderlich.com/425-mapkit-tutorial-overlay-views

如何根据以上教程中编写的代码简化任务?我已经完成了本教程,所以我正在寻找添加任何代码以及确定放置位置和代码种类的帮助。

我发现关于此主题的其他教程没有帮助,因为它们适用于其他地图类型,例如Google地图或MapBox。关于MapKit和MaximumZ的苹果网站也没有太大帮助。

我是XCode和Swift的初学者,并且以前对Python的经验很少。我希望限制缩放比例,让用户访问部分地图会更容易...

override func viewDidLoad() {
  super.viewDidLoad()

  let latDelta = park.overlayTopLeftCoordinate.latitude -
    park.overlayBottomRightCoordinate.latitude

  // Think of a span as a tv size, measure from one corner to another
  let span = MKCoordinateSpanMake(fabs(latDelta), 0.0)
  let region = MKCoordinateRegionMake(park.midCoordinate, span)

  mapView.region = region
}

到目前为止,这是我要使用想要限制用户限制区域的矩形在想要的位置启动应用程序。

1 个答案:

答案 0 :(得分:0)

MKMapView具有一个委托MKMapViewDelegate。该协议具有一个称为:

的功能。
func mapViewDidChangeVisibleRegion(_:)

每当用户滚动或缩放地图时,都会调用此方法。在此方法中,您可以指定地图的行为。例如,您可以设置希望地图放大的特定区域,并指定允许的最大缩放级别。

然后在功能mapViewDidChangeVisibleRegion(_ :)中,您可以检查地图可以放大到的纬度和经度。如果增量低于或高于某个特定水平,则可以通过使用以下方式设置区域来锁定缩放:

func mapViewDidChangeVisibleRegion(_ mapView: MKMapView) {

    if mapView.region.span.latitudeDelta < 0.4 {
        regionSpan = MKCoordinateSpan(latitudeDelta: 0.4, longitudeDelta: 0.5)
        let mapRegion = MKCoordinateRegion(center: self.centerCoordinate, span: self.regionSpan)
        self.trackMapView.setRegion(mapRegion, animated: true)
    }
}