ios - 如何限制 MapKit 中 Apple map 特定区域的平移和缩小?

标签 ios swift mapkit panning

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

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

我将如何根据上面教程中编写的代码完成我的任务?我已经完成了本教程,因此我正在寻求帮助来添加任何代码并确定要放置的位置和类型。

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

我是 XCode 和 Swift 的初学者,之前对 Python 仅有一点经验。我希望限制缩放和用户对部分 map 的访问会更容易......

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
}

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

最佳答案

MKMapView 有一个委托(delegate) MKMapViewDelegate。该协议(protocol)有一个函数称为:

func mapViewDidChangeVisibleRegion(_:)

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

在函数mapViewDidChangeVisibleRegion(_:)中,您可以检查 map 可以放大到什么latitudeDelta和longitudeDelta。如果增量低于或高于某个水平,您可以通过设置区域来锁定缩放,如下所示:

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

关于ios - 如何限制 MapKit 中 Apple map 特定区域的平移和缩小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56939723/

相关文章:

ios - 登录屏幕后导航栏为空

ios - AVAudioPlayer mp3 文件无法播放

swift - 不能对 '[...]' 类型的不可变值使用可变成员

uiscrollview - 检测 MKMapView 的平移 + 减速

iOS 7 反向地理编码使用 Mapkit

android - PhoneGap Android + jQuery 移动应用程序不会向下滚动

ios - 使用不同类型覆盖属性

ios - 简单的交换代码在 swift 中不起作用

ios - 将 SQL 数据从 Annotation click 传递到新 View

ios - 有没有办法发现用户正在以编程方式从设备中删除 iOS 应用程序?