2015-08-29 3 views
0

У меня есть вид google maps, встроенный в контроллер TabBar, и это второй элемент на вкладке. Вид загружает карту, но не отображает текущее местоположение или кнопку определения местоположения. Я уже отредактировал схему, чтобы указать место для используемой сборки.Карты Google, не отображающие текущее местоположение или локализацию

var locationManager = CLLocationManager() 
    var didFindMyLocation = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     var camera = GMSCameraPosition.cameraWithLatitude(33.7, 
      longitude: -77.4, zoom: 8.0) 
     mapView.camera = camera 

     locationManager.delegate = self 
     locationManager.requestWhenInUseAuthorization() 
     mapView.addObserver(self, forKeyPath: "myLocation", options: NSKeyValueObservingOptions.New, context: nil) 

     // Do any additional setup after loading the view. 
    } 

    func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
     if status == CLAuthorizationStatus.AuthorizedWhenInUse { 
      mapView.myLocationEnabled = true 
     } 
    } 

    override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) { 
     if !didFindMyLocation { 
      let myLocation: CLLocation = change[NSKeyValueChangeNewKey] as! CLLocation 
      mapView.camera = GMSCameraPosition.cameraWithTarget(myLocation.coordinate, zoom: 10.0) 
      mapView.settings.myLocationButton = true 

      didFindMyLocation = true 
     } 
    } 

ответ

2

Если разрешение местоположение было ранее установлено func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus), вероятно, не вызывается, поскольку статус авторизации не меняется.

Вы также можете просто вручную выполнить проверку на авторизацию, а затем включите его местоположение на карте

if CLLocationManager.locationServicesEnabled() 
       && CLLocationManager.authorizationStatus() == CLAuthorizationStatus.AuthorizedWhenInUse { 
    mapView.myLocationEnabled = true 
} 

Checking authorization status documentation

+0

Как я могу получить местоположение пользователя с этого момента? Я реализовал то, что у вас было выше в viewdidload и добавил: mapView.camera = GMSCameraPosition.cameraWithTarget (mapView.myLocation.coordinate, zoom: 10.0) в блоке оператора if, но программа вылетает из-за того, что mapView.myLocation.coordinate равен нулю. – wxcoder

+0

@wxcoder вид карты извлекает текущий асинхронно из основного местоположения, когда он доступен, поэтому он будет недоступен немедленно. С тем, что у вас есть в вашем исходном примере, местоположение будет восстановлено для обновления камеры в watchValueForKeyPath, и все должно быть хорошо. – makeshiftJake

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