2014-10-04 10 views
5

Sto cercando di utilizzare Google Maps per iOS in un progetto Swift per iOS 8. Ho aggiunto l'intestazione del bridging Objective-C e aggiunto l'SDK di Google Maps come istruito nel loro documentation. E ho provato l'esempio this e funziona tutto bene.Impossibile visualizzare la mia posizione in Google Maps su iOS 8

Avevo bisogno di mostrare la mia posizione corrente. Ho impostato le coordinate per una posizione personalizzata nel mio simulatore iOS 8 e ho modificato il codice come mostrato nella risposta StackOverflow this. Di seguito è la versione Swift di esso.

import UIKit 
import Foundation 

class MapViewController: UIViewController { 

    @IBOutlet var mapView: GMSMapView! 

    var firstLocationUpdate: Bool? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let camera = GMSCameraPosition.cameraWithLatitude(-33.86, longitude: 151.20, zoom: 12) 
     mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera) 
     mapView.settings.compassButton = true 
     mapView.settings.myLocationButton = true 

     mapView.addObserver(self, forKeyPath: "myLocation", options: .New, context: nil) 

     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.mapView.myLocationEnabled = true 
     }) 
     println(mapView.myLocation) 
     view = mapView 

     let marker = GMSMarker() 
     marker.position = CLLocationCoordinate2DMake(-33.86, 151.20) 
     marker.title = "Sydney" 
     marker.snippet = "Australia" 
     marker.map = mapView 
    } 

    override func observeValueForKeyPath(keyPath: String!, ofObject object: AnyObject!, change: [NSObject : AnyObject]!, context: UnsafeMutablePointer<Void>) { 
     firstLocationUpdate = true 
     let location = change[NSKeyValueChangeNewKey] as CLLocation 
     mapView.camera = GMSCameraPosition.cameraWithTarget(location.coordinate, zoom: 14) 
    } 
} 

L'ho eseguito ma non indica la posizione che ho assegnato. Quando I println() esce dalla posizione println(mapView.myLocation), restituisce nil.

Presumo che questo sia dovuto al fatto che in iOS8, dobbiamo chiedere esplicitamente all'utente di consentirci di ottenere la loro posizione. Vedi here.

Ho aggiunto la chiave NSLocationWhenInUseUsageDescription al mio info.plist. Il mio problema è come posso chiedere l'autorizzazione su CLLocationManager poiché sto utilizzando l'SDK di Google Maps. Ho inserito il codice qui sotto solo per verificare ma non ha richiesto la finestra di dialogo delle autorizzazioni.

let locationManager = CLLocationManager() 
locationManager.requestWhenInUseAuthorization() 

C'è una soluzione? O dobbiamo aspettare che Google aggiorni il loro SDK?

Grazie.

+0

Cosa stai eseguendo 'self.mapView.myLocationEnabled = true' in un dispaccio asincrona – Paulw11

risposta

7

È necessario conservare CLLocationManager, altrimenti viene rilasciato prima che venga visualizzata la finestra di dialogo di autorizzazione.

class MapViewController: UIViewController { 

@IBOutlet var mapView: GMSMapView! 

var firstLocationUpdate: Bool? 
let locationManager=CLLocationManager() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.locationManager.requestWhenInUseAuthorization() 

    let camera = GMSCameraPosition.cameraWithLatitude(-33.86, longitude: 151.20, zoom: 12) 
    mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera) 
    mapView.settings.compassButton = true 
    mapView.settings.myLocationButton = true 

    mapView.addObserver(self, forKeyPath: "myLocation", options: .New, context: nil) 

    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     self.mapView.myLocationEnabled = true 
    }) 
    println(mapView.myLocation) 
    view = mapView 

    let marker = GMSMarker() 
    marker.position = CLLocationCoordinate2DMake(-33.86, 151.20) 
    marker.title = "Sydney" 
    marker.snippet = "Australia" 
    marker.map = mapView 
} 
+0

ottenuto che funziona! Grazie. – Isuru