2012-04-07 10 views
5

sto scrivendo un 5 iOS, che tiene traccia di posizione di un utente in tempo reale, tracciare il loro corso su un MKMapView. Ogni volta che viene presa una lettura GPS, vorrei che fosse tracciata una polilinea tra le posizioni attuali e quelle vecchie, formando eventualmente una traccia (o briciole di pane) di dove l'utente ha viaggiato.Estensione di MKPolylines o creazione di più MKPolylines?

mi trovo a mio agio con l'utilizzo di MKPolyline e MKPolylineView per disegnare una traccia, partendo dal presupposto che ho tutte le CLLocationCoordinate2D coordinate in anticipo, utilizzando codice simile al seguito:

MKPolyline *route = [MKPolyline polylineWithCoordinates:coordinates count:[self.coordinateArray count]];   
[mapView addOverlay:route]; 

Tuttavia, dal momento che sto ottenendo soltanto il CLLocationCoordinate2D coordinate in tempo reale (come viene chiamato il metodo delegato locationManager:didUpdateToLocation:fromLocation:) Non sono sicuro del modo migliore per disegnare le nuove polilinee.

Posso estendere le linee esistenti (ad esempio aggiungendo all'array coordinates basato su C - non avendo molta esperienza C non sono sicuro di come farlo) o devo creare una nuova polilinea tra le due coordinate successive (sebbene Ho sentito dire che avere troppe polilinee individuali sulla mappa può influire sulle prestazioni e sull'uso della memoria ...)?

Grazie in anticipo.

+1

Hai visto il campione di Apple App [i breadcrumb] (http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html)? – Anna

risposta

5

Innanzitutto, vedere how to update MKPolyline/MKPolylineView?, in particolare il collegamento al codice di esempio Breadcrumb. Potrebbe essere un buon punto di partenza per ciò di cui hai bisogno.

Tuttavia, vedrete che una parte vitale del suo oggetto CrumbPath è una chiamata a realloc. Quindi sì, è necessario sapere come gestire gli array in stile C se si desidera archiviare in modo efficiente i propri array di punti. Sì, questo non è facile. Sì, la manipolazione degli array in stile C è un invito per perdite di memoria.

L'esempio di breadcrumb utilizza realloc per ridimensionare l'array. Puoi essere un po 'più sicuro allocando la memoria che l'array usa con il tipo NSMutableData. È consigliato come risposta a Is it ok to use “classic” malloc()/free() in Objective-C/iPhone apps?. Leggi le altre soluzioni per vedere le normali funzioni C malloc() e free() che svolgono lo stesso lavoro. Nota che NSMutableData ha un pratico metodo increaseLengthBy:.

Quando si capisce perché ogni studente C tenta di utilizzare sizeof() in modo errato - e come usarlo correttamente - capirai la gestione della memoria C.

+0

Grazie per la risposta (e indicandomi il codice di esempio Breadcrumb!). – Skoota

+1

Il link di esempio Breadcrumb è rotto. Ho trovato il nuovo link: http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html –

Problemi correlati