2014-08-28 10 views
14

Ho recentemente incorporato l'SDK di Google Maps per iOS all'interno di un'app iOS. Questa app è progettata per recuperare la posizione degli aeromobili (incluso modello di aeromobile, lat/lng, velocità - valori di base per un aeromobile) e quindi tracciarli su una mappa di Google.Ottimizzazione delle prestazioni delle immagini degli indicatori personalizzati con Google Maps SDK per iOS

Ora, di recente, il numero di aerei che l'API (quello che sto utilizzando) sta restituendo è raddoppiato, quasi triplicato. Ho avuto problemi prima ancora ogni volta che tenta di eseguire l'applicazione, si blocca, dandomi il seguente errore:

((null)) was false: Reached the max number of texture atlases, can not allocate more. 

Ho trovato questa pagina problema su Google Code per l'SDK: https://code.google.com/p/gmaps-api-issues/issues/detail?id=5756 - qui, mi sono fatto credere che il problema con il mio incidente sia dovuto al numero di immagini di marcatori personalizzati che sto usando. Ogni modello di aeromobile ha un'immagine diversa e questi vengono caricati mentre vengono renderizzati e un oggetto UII assegnato a un GMSMarker.

Ora, il problema che ho è con una grande quantità di risultati, ottengo questo incidente. Allo stesso tempo, voglio anche avere immagini individuali per ogni marcatore.

La mia domanda è, c'è un modo che invece di assegnare a ciascun marker una UIImmagine di un aereo specifico, posso fare riferimento una volta a ciascuna immagine per ottimizzare le prestazioni?

Apprezzo il vostro aiuto, per favore fatemi sapere se non mi sono chiarito!

risposta

15

Rispondere alla mia domanda dopo aver riscontrato nuovamente il problema.

Il problema sembra essere che sto assegnando un'istanza UIImage separata a ciascun marcatore. Ciò significa che quando sto tracciando dei marcatori sull'istanza di GMSMapView, ogni marker ha una UIImage separata. Questo è descritto brevemente qui: Customize the marker image - Google Maps SDK for iOS.

If you are creating several markers with the same image, use the same instance of UIImage for each of the markers. This helps improve the performance of your application when displaying many markers.

Stavo scorrendo un elenco di oggetti per creare ogni marcatore:

for (int i = 0; i < [array count]; i++) { 
    UIImage *image = [UIImage imageWithContentsOfFile:@"image.png"]; 
    CLLocationCoordinate2D position = CLLocationCoordinate2DMake(10, 10); 
    GMSMarker *marker = [GMSMarker markerWithPosition:position]; 
    marker.title = @"Hello World"; 
    marker.icon = image; 
    marker.map = mapView_; 
} 

Così qui, stavo copiando l'immagine da ogni indicatore. Questo ha richiesto più risorse del necessario. La soluzione per me:

UIImage *image = [UIImage imageWithContentsOfFile:@"image.png"]; 

for (int i = 0; i < [array count]; i++) { 
    CLLocationCoordinate2D position = CLLocationCoordinate2DMake(10, 10); 
    GMSMarker *marker = [GMSMarker markerWithPosition:position]; 
    marker.title = @"Hello World"; 
    marker.icon = image; 
    marker.map = mapView_; 
} 

Definire l'istanza UIImage al di fuori del ciclo for ha fatto sì che l'immagine è stata riferimento per ogni indicatore, non re-rendering per ogni marcatore. L'utilizzo della memoria era molto più basso dopo questo.

0

La mia soluzione; ((null)) era falso: raggiunto il numero massimo di atlanti di trama, non è possibile allocare altro.

È possibile mantenere le informazioni sulla posizione fuori dal filo durante la creazione dei marcatori.

OperationQueue.main.addOperation { 
    let coordinates = CLLocationCoordinate2D(latitude:LatData!, longitude: longData!) 
    let marker = GMSMarker(position: coordinates) 
    marker.icon = GMSMarker.markerImage(with: .blue) 

    for i in 0 ... self.DemandLong.count { 
     marker.infoWindowAnchor = CGPoint(x: 0, y: 5) 
     marker.map = self.MyExploreView 

     marker.accessibilityLabel = "\(i)" //Marker Label 
     print("Location Marker i:\(i)") 
    } 
} 
+0

Si prega di chiarire la risposta, quando si dice "mantenere le informazioni sulla posizione fuori dal thread", vuoi dire uscire dal ciclo for? – Efren

+0

No, Struttura sul ciclo for. –

Problemi correlati