我想在地圖上設置初始位置,我從用戶配置文件中獲取的座標存儲在數據庫中,例如userLocation。我打電話GMSCameraPosition
viewDidLoad
,但已經注意到,模擬器檢測當前位置並將地圖放在它的中心,而不是我試圖設置的位置。我可以短暫地看到位於userLocation
上的地圖,但立即移動到當前位置。如何在Swift中設置初始地圖位置?
我甚至打電話stopUpdatingLocation
方法,但沒有成功。
是否stopUpdatingLocation
在停止之前調用位置更新一次?當我使用斷點追蹤時,這就是我所看到的!
GMSCameraPosition
是否也改變底層座標或只是在提供的座標集中?
以下是代碼。
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
locationManager.distanceFilter = 50
locationManager.requestWhenInUseAuthorization()
mapView.delegate = self
if userLocation != nil {
mapView.myLocationEnabled = false
locationManager.stopUpdatingLocation()
mapView.camera = GMSCameraPosition(target: selectedCoordinate!.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
}
}
extension MapViewController: CLLocationManagerDelegate {
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
if status == .AuthorizedWhenInUse {
locationManager.startUpdatingLocation()
mapView.myLocationEnabled = true
mapView.settings.myLocationButton = true
}
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let location = locations.first {
mapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
locationManager.stopUpdatingLocation()
}
}
}
extension MapViewController: GMSMapViewDelegate {
func mapView(mapView: GMSMapView, idleAtCameraPosition position: GMSCameraPosition) {
reverseGeocodeCoordinate(position.target)
}
}
感謝
感謝。我用一個標誌來實現,但你的答案更清晰。 – ashishn
我正面臨另一個問題。地圖隨機打開<+ 51.17889992,-1.82639994>座標。下面是一些打印語句輸出 MapViewCoontroller - idleAtCameraPosition - 位置:CLLocationCoordinate2D(緯度:51.17889991879489,經度:-1.8263999372720716) MapViewCoontroller - didUpdateLocations - 位置選自:可選(<+ 51.17889992,-1.82639994> MapViewCoontroller - didUpdateLocations - 位置選擇:可選(<+ 51.17889992,-1.82639994> – ashishn
不是,它們是<+ 18.49655889,+ 73.81614894> – ashishn