2016-09-07 4 views
1

Im пытается сделать карту автоматически следовать за пользователем (местоположением), но каким-то образом приложение либо сбой (сообщение об ошибке), либо карта не отображается, когда я запустите приложение. Что я сделал не так?Карта Google Maps API (GMS) не отображается

Я пробовал без функции locationManager func, а затем он работает. Существуют ли другие способы отслеживания пользователя?

class GMSTestViewController: BaseViewController, GMSMapViewDelegate { 

     @IBOutlet weak var mapView: GMSMapView! 

     let locationManager = CLLocationManager() 
     var manager:CLLocationManager! 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      //Setup Location Manager 
      manager = CLLocationManager() 
      manager.delegate = self 
      manager.desiredAccuracy = kCLLocationAccuracyBestForNavigation 
      manager.requestAlwaysAuthorization() 
      manager.startUpdatingLocation() 

      //Map type 
      mapView.mapType = kGMSTypeTerrain 
     } 

     override func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
      let userLocation = locations.last 
      let center = CLLocationCoordinate2D(latitude: userLocation!.coordinate.latitude, longitude: userLocation!.coordinate.longitude) 

      let camera = GMSCameraPosition.cameraWithLatitude(userLocation!.coordinate.latitude, 
                   longitude: userLocation!.coordinate.longitude, zoom: 8) 
      let mapView = GMSMapView.mapWithFrame(.zero, camera: camera) 
      mapView.myLocationEnabled = true 
      self.view = mapView 

      let marker = GMSMarker() 
      marker.position = center 
      marker.title = "Current Location" 
      marker.snippet = "XXX" 
      marker.map = mapView 

      locationManager.stopUpdatingLocation() 
     } 

    } 

Похоже на это, когда я запускаю его, а затем он продолжает мигать с картой (на месте пользователя).

+0

Вы можете разместить скриншот/выход аварии? –

+0

@JohnFarkerson Я обновил вопрос – Victor

ответ

1

Я считаю, что лучший способ сделать это, чтобы использовать ключ-значение наблюдения (КВО):

override func viewWillAppear(animated: Bool) { 
    mapView.addObserver(self, forKeyPath: "myLocation", options:0, context:nil) 
} 

deinit { 
    mapView.removeObserver(self, forKeyPath:"myLocation", context:0) 
} 

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    if(keyPath! == "myLocation"]) { 
     let location = [object myLocation] 

     let target = 
     CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude); 

     mapView.animateToLocation(target) 
     mapView.animateToZoom(17) 
    } 
} 
1

Проверьте эти вещи: -

  • Вы установили делегат вашего GMSMapview@IBOutlet к себе

     mapView.delegate = self 
    
  • Вы обновили свой файл info.plist с конкретный ключ

  • У вас есть подходящий интернет-партнер ть соединение.
  • Вы настроили Google Maps в вашем AppDelegate

    var googleApiKey = String(_yourAPIkey) 
        GMSServices.provideAPIKey(googleApiKey) 
    
+0

сделал это решить вашу проблему> – Dravidian

0

Google map

Кажется, что карта google не отображается в вашем представлении. Я думаю, что вы хотите получить представление, как в imag е.

Так я предлагаю вам скачать Google Map SDK версию ниже 1.10, потому что я сталкиваюсь с этой проблемой слишком много раз.

Я предлагаю вам скачать Google Map SDK 1.9.1 для карты Google из ниже ссылке

https://developers.google.com/maps/documentation/ios-sdk/releases

Просто попробуйте использовать версию 1.9.1 раз. Надеюсь, что эта вещь работает

ПРИМЕЧАНИЯ: Если вы хотите использовать место автозаполнения и другие новые услуги карты Google, а затем использовать более высокие версии Google карты SDK

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