【问题标题】:MapKit doesn't center on right locationMapKit 没有以正确的位置为中心
【发布时间】:2016-01-09 20:58:14
【问题描述】:

我在 Swift 中的 MapKit 有问题。我希望它以特定坐标为中心,但默认中心根本不会改变。我的 viewController.swift 文件的第一个(也是最重要的部分)如下所示:

import UIKit
import Parse
import MapKit
import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

    var map : MKMapView! = MKMapView()
    var locManager:CLLocationManager!

    @IBOutlet var txtUsername: UITextField!
    @IBOutlet var txtPassword: UITextField!

    override func viewDidLoad() {
        var centerCoordinate = CLLocationCoordinate2DMake(41.8796677, -87.6198131)

        var mapSpan = MKCoordinateSpanMake(0.01, 0.01)

        var mapRegion = MKCoordinateRegionMake(centerCoordinate, mapSpan)

        self.map.setRegion(mapRegion, animated: true)

        locManager = CLLocationManager()
        locManager.delegate = self
        locManager.desiredAccuracy = kCLLocationAccuracyBest
        locManager.requestAlwaysAuthorization()
        map.showsUserLocation = true
        super.viewDidLoad()
    }

地图的中心没有被变量'centerCoordinate'改变的原因是什么?

【问题讨论】:

  • 为什么你的代码在viewDidLoad之前?你也可以用地图视图的图像更新问题
  • 你应该在 ViewDidAppear() 中调用你的代码,因为你会知道你有用户位置

标签: ios swift location mapkit


【解决方案1】:

在使用地图时会自动调用一些函数。其中之一是

func mapViewDidFinishLoadingMap(mapView: MKMapView)

尝试这样做。

  func mapViewDidFinishLoadingMap(mapView: MKMapView) {
    map.setRegion(mapRegion, animated: true)
}

如果这不起作用,请键入 func mapView 并查看列表并找到您认为可能的,但我觉得这是它需要的地方。

【讨论】:

    【解决方案2】:

    在 ViewController.swift 中,找到 viewDidLoad 并将以下内容添加到方法的末尾:

    // set initial location in Honolulu
    let initialLocation = CLLocation(latitude: 21.282778, longitude: -157.829444)
    

    您将使用它来将地图视图的起始坐标设置为檀香山的一个点。 当你试图告诉地图要显示什么时,你不能只给出纬度和经度。这足以使地图居中,但您还需要指定要显示的矩形区域以获得正确的缩放级别。 将以下常量和辅助方法添加到类中:

    let regionRadius: CLLocationDistance = 1000
    func centerMapOnLocation(location: CLLocation) {
      let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, 
        regionRadius * 2.0, regionRadius * 2.0)
      mapView.setRegion(coordinateRegion, animated: true)
    }
    

    位置参数是中心点。根据 regionRadius 的距离,该区域将具有南北和东西跨度 - 您将其设置为 1000 米(1 公里),即半英里多一点。然后在此处使用 regionRadius * 2.0,因为它非常适合在 JSON 文件中绘制公共艺术品数据。 setRegion 告诉 mapView 显示区域。地图视图通过简洁的缩放动画自动将当前视图转换到所需区域,无需额外代码! 回到viewDidLoad,在方法末尾添加下面一行:

    centerMapOnLocation(initialLocation)
    

    这将调用辅助方法在启动时放大initialLocation。 构建并运行应用程序,现在它应该放大到威基基的中心:]

    字体:http://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorial

    【讨论】:

      【解决方案3】:

      斯威夫特 5.

      MKMapViewDelegate中,我推荐使用regionDidChangeAnimated方法,并根据用户坐标设置mapView的区域。根据您的用例更改跨度。

      extension MapViewController: MKMapViewDelegate {
          func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
              mapView.setRegion(MKCoordinateRegion(center: userLocation.coordinate, span: MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1)), animated: true)
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-18
        • 1970-01-01
        • 2022-01-19
        • 2016-05-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多