2016-08-20 4 views
1

Я пытаюсь установить начальное местоположение на карте в координату, которую я получаю из профиля пользователя, хранящегося в базе данных, например 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) 

    } 
} 

Благодаря

ответ

1

Добавить: -

locationManager. stopMonitoringSignificantLocationChanges() после locationManager.stopUpdatingLocation()

Также Имейте в виду, что CLLocationManagerDelegate является протоколом класса asynchronously запуска, который означает, что как только вы выполнить линию mapView.delegate = self, вы инициализирован ваш делегат self, который отправит вызов для извлечения usersCurrentLocation geoCoordinates, что означает, что он проверяет, являются ли его протоколы в этом конкретном классе согласуются методы, потому что, если они будут тогда, они будут называть эти методы независимо от того, вы или нет, вы вызвали 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

Смежные вопросы