2012-04-07 5 views
5

ich eine iOS 5 App schreibe, die den Standort eines Nutzers in Echtzeit verfolgt, auf einem MKMapView ihren Kurs Plotten. Wenn eine GPS-Messung durchgeführt wird, möchte ich eine Polylinie zwischen dem aktuellen und dem alten Standort ziehen, die schließlich eine Spur (oder einen Breadcrumb) des Ortes bildet, an dem der Benutzer gereist ist.MKPolylines erweitern oder mehrere MKPolylines erstellen?

Ich bin bequem mit MKPolyline und MKPolylineView mit einer Spur zu ziehen, unter der Annahme, dass ich alle CLLocationCoordinate2D Koordinaten im Voraus haben, Code wie unten:

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

Da ich aber nur die CLLocationCoordinate2D immer bin Echtzeitkoordinaten in (wie der locationManager:didUpdateToLocation:fromLocation: Delegatmethode genannt wird) ich bin nicht sicher, der beste Weg, um die neuen Polylinien zu ziehen.

Kann ich erweitern die bestehenden Linien (dh Addition der C-basierten coordinates Array - nicht viel C Erfahrung mit Ich bin nicht sicher, wie dies zu tun) oder brauche ich eine neue Polylinie zwischen den beiden nächsten Koordinaten erstellen (obwohl Ich habe gehört, dass zu viele einzelne Polylinien auf der Karte Auswirkungen auf die Leistung und Speichernutzung haben können ...)?

Vielen Dank im Voraus.

+1

Haben Sie die Apple Beispiel App [Breadcrumb] (http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html) gesehen? – Anna

Antwort

5

Zuerst siehe how to update MKPolyline/MKPolylineView?, insbesondere der Link zum Breadcrumb Beispielcode. Es kann ein guter Ausgangspunkt für das sein, was Sie brauchen.

Sie werden jedoch sehen, dass ein wichtiger Teil seines Objekts CrumbPath ein Anruf an realloc ist. Also ja, Sie müssen wissen, wie man C-artige Arrays verwaltet, wenn Sie Ihre Punktarrays effizient speichern wollen. Ja, das ist nicht einfach. Ja, C-artige Array-Manipulation ist eine Einladung für Speicherlecks.

Paniermehlprodukt Beispiel verwendet realloc seine Array zu ändern. Sie können ein wenig sicherer sein, indem Sie den Speicher zuweisen, den das Array mit dem Typ NSMutableData verwendet. Es wird als Antwort auf Is it ok to use “classic” malloc()/free() in Objective-C/iPhone apps? empfohlen. Lesen Sie die anderen Lösungen regelmäßig C malloc() und free() Funktionen zu sehen, die gleiche Arbeit tun. Beachten Sie, dass NSMutableData eine sehr praktische Methode increaseLengthBy: hat.

Wenn Sie verstehen, warum jeder C Student sizeof() falsch zu verwenden versucht - und wie man es richtig nutzen - Sie werden C verstehen Speicherverwaltung.

+0

Vielen Dank für Ihre Antwort (und zeigt mir den Breadcrumb Beispielcode!). – Skoota

+1

Der Breadcrumb-Beispiellink ist unterbrochen. Ich habe die neue Verbindung gefunden: http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html –

Verwandte Themen