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.
Cosa stai eseguendo 'self.mapView.myLocationEnabled = true' in un dispaccio asincrona – Paulw11