我怎样才能迅速将用户的位置中心地图?

我正在写一个应用程序,我有一个embedded式的地图视图来显示用户的位置。 这是我的代码到目前为止:

class YourCurrentLocation: UIViewController, CLLocationManagerDelegate { @IBOutlet weak var mapView: MKMapView! var locationManager = CLLocationManager() let regionRadius: CLLocationDistance = 1000 func checkLocationAuthorizationStatus() { if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse { mapView.showsUserLocation = true centerMapOnLocation(locationManager.location!, map: mapView, radius: regionRadius) } else { locationManager.requestAlwaysAuthorization() //requestWhenInUseAuthorization() } } func centerMapOnLocation(location: CLLocation, map: MKMapView, radius: CLLocationDistance) { let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, radius * 2.0, radius * 2.0) map.setRegion(coordinateRegion, animated: true) } override func viewDidLoad() { super.viewDidLoad() // mapView.delegate = self if CLLocationManager.locationServicesEnabled() { //locationManager = CLLocationManager() locationManager.delegate = self locationManager.requestAlwaysAuthorization() locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.startUpdatingLocation() print("location enabled") checkLocationAuthorizationStatus() } else { print("Location service disabled"); } // Do any additional setup after loading the view. } } 

我还将这两个条目添加到我的plist中:

 NSLocationAlwaysUsageDescription NSLocationWhenInUseUsageDescription 

而且在我的xcode中,我已经设置了模拟伦敦,英国的GPS数据。

当我运行应用程序 – 我看到地图,但伦敦没有标记。 我究竟做错了什么?

顺便说一句,我不得不注释掉这一行:

 //mapView.delegate = self 

viewDidLoad() ,否则我有错误:

 Cannot assign value of type YourCurrentLocation to type MKMapViewDelegate 

而且我不确定这是否是这个问题的一部分。

当我显示给用户地图和在他的位置上的地图上标记的点时,我想达到效果。 你能帮我吗?

代码的问题在于,当用户给出位置权限时,您正在尝试将地图指向用户的位置,而不是等待CoreLocation为您提供实际的用户位置。 在获取用户的实际位置时,需要使用CLLocationManagerDelegate方法locationManager(_:didUpdateLocations:)通知用户,并且可以将地图设置为指向用户的位置。

 class ViewController: UIViewController, CLLocationManagerDelegate { @IBOutlet var mapView: MKMapView! var locationManager: CLLocationManager? override func viewDidLoad() { super.viewDidLoad() locationManager = CLLocationManager() locationManager!.delegate = self if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse { locationManager!.startUpdatingLocation() } else { locationManager!.requestWhenInUseAuthorization() } } func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { switch status { case .NotDetermined: print("NotDetermined") case .Restricted: print("Restricted") case .Denied: print("Denied") case .AuthorizedAlways: print("AuthorizedAlways") case .AuthorizedWhenInUse: print("AuthorizedWhenInUse") locationManager!.startUpdatingLocation() } } func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let location = locations.first! let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, 500, 500) mapView.setRegion(coordinateRegion, animated: true) locationManager?.stopUpdatingLocation() locationManager = nil } func locationManager(manager: CLLocationManager, didFailWithError error: NSError) { print("Failed to initialize GPS: ", error.description) } }