MapKit不以正确的位置为中心



我在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"未更改地图中心的原因是什么?

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

函数映射视图DidFinishLoadingMap(映射视图:MKMapView)

试着这样做。

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

如果这不起作用,请键入func-mapView并在列表中查找您认为可能的,但我觉得这是它需要的位置。

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

location参数是中心点。根据regionRadius的距离,该区域将有南北和东西跨度——您将其设置为1000米(1公里),也就是半英里多一点。然后在这里使用regionRadius*2.0,因为它可以很好地在JSON文件中绘制公共艺术品数据。setRegion命令mapView显示区域。地图视图通过整洁的缩放动画自动将当前视图转换到所需区域,不需要额外的代码!回到viewDidLoad,在方法末尾添加以下行:

centerMapOnLocation(initialLocation)

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

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

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

最新更新