2016-08-20 107 views
1

我想在地圖上設置初始位置,我從用戶配置文件中獲取的座標存儲在數據庫中,例如userLocation。我打電話GMSCameraPositionviewDidLoad,但已經注意到,模擬器檢測當前位置並將地圖放在它的中心,而不是我試圖設置的位置。我可以短暫地看到位於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) 

    } 
} 

感謝

回答

1

地址: -

locationManager. stopMonitoringSignificantLocationChanges()locationManager.stopUpdatingLocation()

而且心說CLLocationManagerDelegateasynchronously運行類的協議,這意味着一旦你執行線mapView.delegate = self,您已初始化您的委託self這將發送電話獲取usersCurrentLocation地理座標,這意味着它將檢查它是否是協議Deleg吃的方法符合那個特定的類,因爲如果他們那麼它會調用這些方法,不管你是否打電話給stopUpdatingLocation()

所以解決方案: -

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

    if userLocation != nil { 



    locationManager.stopUpdatingLocation() 


    mapView.camera = GMSCameraPosition(target: selectedCoordinate!.coordinate, zoom: 15, bearing: 0, viewingAngle: 0) 
} else if let location = locations.first { 

     mapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0) 

     locationManager.stopUpdatingLocation() 
    } 

} 
+0

感謝。我用一個標誌來實現,但你的答案更清晰。 – ashishn

+0

我正面臨另一個問題。地圖隨機打開<+ 51.17889992,-1.82639994>座標。下面是一些打印語句輸出 MapViewCoontroller - idleAtCameraPosition - 位置:CLLocationCoordinate2D(緯度:51.17889991879489,經度:-1.8263999372720716) MapViewCoontroller - didUpdateLocations - 位置選自:可選(<+ 51.17889992,-1.82639994> MapViewCoontroller - didUpdateLocations - 位置選擇:可選(<+ 51.17889992,-1.82639994> – ashishn

+0

不是,它們是<+ 18.49655889,+ 73.81614894> – ashishn

相關問題