2016-05-16 10 views
6

Mapkit su IOS supporta la dequeuing degli overlay? (come fa annotazioni). Se sì, qual è il codice per raggiungere questo?Mapkit su supporto IOS elimina la desquamazione degli overlay? (come fa le annotazioni)

Sfondo: con annotazioni credo che si possano aggiungere molti, lasciando MapKit per istanziare le viste quando richiesto per loro tramite l'approccio dequeuing. Che dire della stessa cosa per le sovrapposizioni, ma se ne ho molte in tutto il paese? Devo scrivere il codice per verificare quali sovrapposizioni sono visibili o meno e quindi istanziarle/rimuoverle da solo in tempo reale?

+0

PS. Inoltre, se le persone sono effettivamente (se questo è un problema) mettendo sovrapposizioni su una mappa come "annotazione", per aggirare questo? Probabilmente non funzionerebbe per gli overlay di grandi dimensioni, tuttavia, poiché parte dell'overlay potrebbe essere disattivata ... – Greg

+0

PSS. In realtà sono circa 8000 su overlay in tutto il paese da installare, quindi alla fine li carico tutti in anticipo o devo gestirli manualmente in modo tale che solo un numero molto più piccolo venga caricato in qualsiasi momento? cioè quelli che sarebbero visibili – Greg

risposta

3

Il kit mappa non supporta il riutilizzo di sovrapposizioni nello stesso modo in cui lo supporta per le viste di annotazione. Uno dei motivi di ciò deve certamente essere che i due oggetti non sono analoghi. Le sovrapposizioni sono oggetti modello che rappresentano un'area sulla mappa, mentre le viste di annotazione sono oggetti di visualizzazione utilizzati di volta in volta per visualizzare la posizione di un'annotazione sulla mappa. La tecnica di riutilizzare gli oggetti di visualizzazione (al contrario di crearne di singoli per ogni utilizzo) è un'ottimizzazione che viene utilizzata in un paio di altri punti in UIKit, in particolare per le celle di visualizzazione tabella e vari bit di viste di raccolta.

Il modello di riutilizzo della vista consente di stabilire alcuni indici di dati (percorsi dell'indice di tabella, coordinate della mappa) e quindi disporre di un oggetto di visualizzazione appropriato da utilizzare quando viene visualizzato un particolare indice/posizione. Quando l'oggetto dati passa fuori dalla vista, l'oggetto della vista viene riciclato in una coda.

Un'annotazione è analoga a una sovrapposizione e MapKit non consente di riutilizzarli neanche per una buona ragione: sono i dati che vengono visualizzati!

L'oggetto analogo alla vista di annotazione è un renderizzatore di sovrapposizione, che (ovviamente!) Fornisce il rendering per una sovrapposizione. Presumo che la ragione per cui questi non vengono riutilizzati è perché non sono oggetti del sistema di visualizzazione e presumibilmente molto più leggeri, quindi c'è poco beneficio dal riutilizzo. Troviamo prove per questo nel fatto che fino a iOS 7.0 il delegato di MapView ha fatto fornire un oggetto di visualizzazione per gli overlay e questo è stato sostituito dal concetto di rendering.

Spero che questo aiuti.

Che problema ti causa?

+0

Ho diverse centinaia di sovrapposizioni da mettere in tutto il paese. L'idea è che puoi caricare un numero elevato e poi lasciarlo a MapView per ottimizzare ciò che deve essere visualizzato? Potrebbe essere necessario aggiungerli dal thread principale in modo che l'avvio all'avvio dell'app non sia evidente per l'utente? C'è anche la domanda su come ottenere un elenco di overlay visibili solo per il quale ho una domanda qui: http://stackoverflow.com/questions/37433336/how-to-get-visible-overlays-in-mapkit-ie -mkoverlay-mkoverlayrender-da-a-ma – Greg

+0

PS In realtà abbiamo circa 8000 overlay in tutto il paese da installare, quindi alla fine li carico tutti in anticipo, o devo gestirli manualmente in modo tale che solo un numero molto più piccolo viene caricato in qualsiasi momento? cioè quelli che sarebbero visibili – Greg

+0

8000 è un numero grande. Ho fatto un test con 7200 sovrapposizioni distribuite negli Stati Uniti e ho visto una lentezza evidente su un iPhone 5/iOS 9.3. Sarà necessaria una sorta di piastrellatura per prestazioni decenti. Tuttavia, ho preso una pugnalata semplice a quello e non era particolarmente promettente.Sembra che l'operazione di aggiungere o rimuovere grandi quantità di overlay non sia molto veloce. Forse potresti riorganizzare i tuoi dati in modo che ogni MKOverlay rappresenti una porzione di "overlay" all'interno di una regione della mappa. Il tuo renderizzatore di sovrapposizione dovrebbe essere intelligente nel disegnare gli elementi di dati appropriati. – BrentM

Problemi correlati