2012-04-07 16 views
5

Piszę aplikację iOS 5, która śledzi lokalizację użytkownika w czasie rzeczywistym, wykreślając jego kurs na MKMapView. Za każdym razem, gdy wykonywany jest odczyt GPS, chciałbym, aby polilinia była rysowana pomiędzy obecnymi i starymi lokalizacjami, ostatecznie tworząc ścieżkę (lub ścieżkę nawigacyjną) miejsca, w którym użytkownik przebył podróż.Rozszerzanie MKolinines lub tworzenie wielu MKPolylines?

jestem wygodne z użyciem MKPolyline i MKPolylineView narysować ścieżkę, zakładając, że mam wszystkie współrzędne wyprzedzeniem CLLocationCoordinate2D, używając kodu podobnego do poniżej:

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

Jednakże, ponieważ jestem tylko coraz CLLocationCoordinate2D współrzędne w czasie rzeczywistym (jak nazywa się metoda delegata locationManager:didUpdateToLocation:fromLocation:) Nie jestem pewien najlepszego sposobu na narysowanie nowych polilinii.

Czy mogę rozszerzyć istniejące linie (np. Dodając do tablicy C coordinates - nie mając dużego doświadczenia C Nie jestem pewien, jak to zrobić) lub czy muszę utworzyć nową polilinię między następnymi dwiema współrzędnymi (chociaż Słyszałem, że posiadanie zbyt wielu pojedynczych polilinii na mapie może mieć wpływ na wydajność i zużycie pamięci ...)?

Z góry dziękuję.

+1

Czy widziałeś przykładową aplikację firmy Apple [Breadcrumb] (http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html)? – Anna

Odpowiedz

5

Najpierw zobacz how to update MKPolyline/MKPolylineView?, szczególnie link do kodu przykładowego Breadcrumb. To może być dobry punkt wyjścia do tego, czego potrzebujesz.

Jednak zobaczysz, że istotną częścią obiektu CrumbPath jest połączenie z numerem realloc. Więc tak, musisz wiedzieć, jak zarządzać tablicami w stylu C, jeśli chcesz efektywnie przechowywać tablice punktów. Tak, to nie jest łatwe. Tak, manipulacja w stylu C jest zaproszeniem do wycieków pamięci.

Próbka Breadcrumb używa realloc do zmiany rozmiaru tablicy. Możesz być nieco bezpieczniejszy poprzez przydzielenie pamięci, której używa tablica z typem NSMutableData. Jest zalecany jako odpowiedź na Is it ok to use “classic” malloc()/free() in Objective-C/iPhone apps?. Zapoznaj się z innymi rozwiązaniami, aby zobaczyć, jak zwykłe funkcje C malloc() i free() wykonują to samo zadanie. Zauważ, że NSMutableData ma bardzo przydatną metodę increaseLengthBy:.

Gdy zrozumiesz, dlaczego każdy uczeń C próbuje nieprawidłowo używać sizeof() - i jak go właściwie używać - zrozumiesz zarządzanie pamięcią C.

+0

Dziękuję za odpowiedź (i skierowanie mnie do przykładowego kodu Breadcrumb!). – Skoota

+1

Link do próbki Breadcrumb jest uszkodzony. Znalazłem nowy link: http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html –