2013-12-13 11 views
5

Desidero inizializzare il centro della mappa in una posizione personalizzata. Ecco il codice che uso per l'inizializzazione:Come impostare la posizione centrale dell'oggetto GMSMapView definita nello Storyboard

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    //mapView 
    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:41.0109 
                  longitude:28.998 
                   zoom:6]; 
    self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; 
    [self.mapView setCenter:CGPointMake(41.0109,28.998)]; 
} 

Quando ho eseguito questo codice, ho visto una mappa centrata al Greenwich piuttosto che la posizione che ho dato alla telecamera (41.0109,28.998).

Quando eseguo il debug del codice e stampo la posizione di self.mapView.camera, questo è l'output: GMSCameraPosition 0x17742ee0: target:(41.011, 28.998) bearing:0.000 zoomLevel:6.000 viewingAngle:0.000 lookAhead:0.000. Così ho impostato con successo la posizione della fotocamera, perché si apre con la posizione di Greenwich?

Edit:

prega di notare che, MapView è una visualizzazione secondaria (UIView) che ho aggiunto alla pagina principale e stavo cercando di impostare e modificare la posizione centrale. Ecco un'istantanea della mia storyboard: enter image description here

Quando cerco di modificare MapView, non riesco a impostare il percorso della mappa. Tuttavia, se uso la "vista" che è la vista principale della finestra, posso cambiare con successo il centro della mappa.

Perché è la ragione?

Come si imposta la posizione di avvio di GMSMapView?

Edit 2 Il codice sorgente di questo progetto può essere trovata here

+0

Hai aggiornato la versione più recente di GoogleMaps.framework. – Linuxios

+0

Linuxios, sto usando cocoapods e qui c'è il mio PodFile: 'pod" Google-Maps-iOS-SDK "," ~> 1.6.1 "'. Dice al [Google Maps iOS SDK] (https://developers.google.com/maps/documentation/ios/start#getting_the_google_maps_sdk_for_ios) che 1.6.1 è l'ultima versione. – ankakusu

+0

Prova ad aggiungere una chiamata a '[map startRendering]' alla fine del tuo metodo. Vedi se questo aiuta. – Linuxios

risposta

6

È finito con due GMSMapView oggetti. Il primo è quello che hai creato in Interface Builder e il secondo è quello che hai creato a livello di programmazione con l'oggetto GMSCameraPosition nel metodo -viewDidLoad.

Sembra che self.mapsView faccia riferimento alla vista creata in Interface Builder. Quando assegni un nuovo oggetto GMSMapView a questa linea;

self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];

in realtà si sta perdendo quello che si crea in Interface Builder, in modo che il tentativo di cambiare la posizione della telecamera non funziona, perché si sta inviando il messaggio con l'oggetto sbagliato.

Anche per non aggiungere il secondo oggetto GMSMapView alla gerarchia di viste dopo averlo creato a livello di programmazione, nel metodo -viewDidLoad, non lo si vede nella propria app. Anche se imposta correttamente la posizione della videocamera.

Quindi avete due opzioni;

1- Rimuovere il mapView dal generatore di interfacce (e separare la sua uscita) e non toccare il codice, ma sostituire questa linea;

[self.mapView setCenter:CGPointMake(41.0109,28.998)];

con questa linea;

[self.view addSubview:self.mapView];

Così avrete una vista mappa creata a livello di codice.

2- Non toccare lo storyboard, ma rimuovere questa linea;

self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];

Così sarete la creazione di un guarda la mappa di Interface Builder, e la configurazione di esso.

Quindi andrebbe tutto bene.

+0

risposta perfetta! –

0

Ciò che è possibile fare, in genere, durante l'aggiunta di GMSMapView o qualsiasi altra visualizzazione personalizzata personalizzata, e si desidera comunque utilizzare i meccanismi di Interface Builder. Aggiungere un semplice View dalla libreria IB, quindi andare a Identity Inspector e cambiare la classe in GMSMapView. E sei pronto: puoi applicare vincoli, creare uno sbocco sul ViewController, ecc.