【发布时间】:2015-11-30 09:52:15
【问题描述】:
这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
//Setting up the Location Manager.
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
//Showing user location on the map as a blue dot.
self.theMap.showsUserLocation = true
//Setting the delegate for the map view.
self.theMap.delegate = self
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
//Getting the last recorded location.
let location = locations.last
let ceter = CLLocationCoordinate2D(latitude: (location?.coordinate.latitude)!, longitude: (location?.coordinate.longitude)!)
//Setting the region of the map.
let region = MKCoordinateRegion(center: ceter, span: MKCoordinateSpanMake(0.01, 0.01))
//Assigning the region to the map.
self.theMap.setRegion(region, animated: true)
//Stop updating the location.
self.locationManager.stopUpdatingLocation()
}
func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
//Getting the center coordinate of the screen.
let thecenter = mapView.centerCoordinate
//Storing latitude & longitude in seperate variables.
let centerLat = thecenter.latitude
let centerlon = thecenter.longitude
//Converting CLLocationCoordinate2D to CLLocation.
let movedMap: CLLocation = CLLocation(latitude: centerLat, longitude: centerlon)
//Performing Reverse GeoCoding to retrieve address from Coordinates.
CLGeocoder().reverseGeocodeLocation(movedMap) { (placemarks, error) -> Void in
//Checking for error.
if(error != nil) {
print(error)
}else{
//Taking the first coordinates among the lot & storing in variable 'p'.
if let p = placemarks?.last {
//Unwrapping Optional Strings.
let roadno = p.subThoroughfare ?? ""
//Checking if subThoroughfare exists.
if(p.subThoroughfare != nil) {
//Unwrapping Optional Strings.
let thoroughfare = p.thoroughfare ?? ""
let subLocality = p.subLocality ?? ""
let locality = p.locality ?? ""
let administrativeArea = p.administrativeArea ?? ""
let postalCode = p.postalCode ?? ""
let country = p.country ?? ""
let address = " \(roadno) \r \(thoroughfare) \r \(subLocality) \r \(locality) \(administrativeArea) \(postalCode) \r \(country)"
print(address)
//Assigning the address to the address label on the map.
self.addressLabel.text = " \(roadno) \r \(thoroughfare) \r \(subLocality) \r \(locality) \(administrativeArea) \(postalCode) \r \(country)"
}else{
//Unwrapping Optional Strings.
let thoroughfare = p.thoroughfare ?? ""
let subLocality = p.subLocality ?? ""
let locality = p.locality ?? ""
let administrativeArea = p.administrativeArea ?? ""
let postalCode = p.postalCode ?? ""
let country = p.country ?? ""
let address = " \(roadno) \r \(thoroughfare) \r \(subLocality) \r \(locality) \(administrativeArea) \(postalCode) \r \(country)"
print(address)
//Assigning the address to the address label on the map.
self.addressLabel.text = " \(thoroughfare) \r \(subLocality) \r \(locality) \(administrativeArea) \(postalCode) \r \(country)"
}
}
}
}
}
我确定我的错误是 regionDidChangeAnimated() 函数,但我无法理解为什么它是反向地理编码坐标,即使在 GPS 许可之前。
*已编辑
这是我在运行项目时偶尔收到的一条新错误消息。
尝试在不提示位置授权的情况下启动 MapKit 位置更新。必须先调用 -[CLLocationManager requestWhenInUseAuthorization] 或 -[CLLocationManager requestAlwaysAuthorization]。
【问题讨论】:
标签: ios swift mapkit core-location locationmanager