【问题标题】:How do i restrict panning and restrict zooming out of a certain area of apple maps in MapKit?如何在 MapKit 中限制平移和缩小苹果地图的某个区域?
【发布时间】:2019-11-18 06:03:15
【问题描述】:

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

为了让应用程序从我想要的位置而不是随机地图开始,我使用了 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
}

到目前为止,这是我让应用程序在我想要的位置启动的方法,使用一个矩形来限制我希望限制用户进入的区域。

【问题讨论】:

    标签: ios swift mapkit panning


    【解决方案1】:

    MKMapView 有一个委托 MKMapViewDelegate。这个协议有一个函数叫做:

    func mapViewDidChangeVisibleRegion(_:)
    

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

    在函数 mapViewDidChangeVisibleRegion(_:) 中,您可以检查地图可以放大到的 latitudeDelta 和 longitudeDelta。如果 delta 低于或高于某个水平,您可以通过使用以下内容设置区域来锁定缩放:

    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)
        }
    }
    

    【讨论】:

    • 嗨,我尝试使用 IsZoomEnabled 和 isZScrollEnabled 命令,它们确实有效,但我现在的问题是用户根本无法放大。如果我希望用户能够在我设置的设置边界内的任何地方放大和缩小,我该怎么办?即在地图上设置最小缩放级别,但当用户滚动经过某个点时关闭滚动,但当用户在边界时重新打开?谢谢
    • 我将上面的代码复制并粘贴到 xcode 中,看看是否可以让它工作,但它出现了关于 ViewController 没有成员“CentreCoordinate”或未解析标识符“regionSpan”的错误消息.我有自己的中心坐标坐标,如下所示,但是如何让函数识别这些变量?以下代码被粘贴到 viewDidLoad 而不是实际函数中:
    • let latDelta = park.overlayTopLeftCoordinate.latitude - park.overlayBottomRightCoordinate.latitude let span = MKCoordinateSpanMake(fabs(latDelta), 0.0) let region = MKCoordinateRegionMake(park.midCoordinate, span)
    • 嗨,Raymond,代码是我构建的示例。变量centerCoordinate 不是 MapView 属性。在定义 MKCoordinateRegion 时,您必须自己定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 2012-08-16
    • 2017-05-31
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多