2010-07-03 11 views
14

Próbuję utworzyć nakładkę polilinii (MKPolyline), która jest okresowo aktualizowana, aby symulować ruch obiektu. Mogę to osiągnąć, usuwając starą nakładkę, aktualizując polilinię i ponownie dodając nakładkę, ale to prowadzi do migotania.jak zaktualizować MKPolyline/MKPolylineView?

W przypadku adnotacji punktów (MKPointAnnotation) można po prostu zmienić jej współrzędne, a widok zostanie zaktualizowany automatycznie i płynnie bez konieczności usuwania i ponownego dodawania adnotacji.

Czy jest to również możliwe w przypadku nakładki?

+0

Pisałem pełną implementację [tutaj] [1] [1]: http://stackoverflow.com/questions/11282271/draw-line-on-mkmapview-with-pattern -image/11344230 # 11344230 – EsbenB

Odpowiedz

15

Tak, należy dodać dodatkową nakładkę z zestawem punktów od ostatniego punktu do następnego punktu. Po utworzeniu MKPolyline za pomocą punktów, nie można jej zmienić, gdy rysuje MKPolylineView bez usuwania starego i dodawania nowo utworzonego.

możesz utworzyć nowy widok polilinii ze wszystkimi punktami (włączając w to nowy) i dodać go do mapy, ale nie usuwaj starszego. po dodaniu nowego możesz usunąć starszy, starszy. To może nie być ładne, ale powinno pozbyć się flashowania aktualizacji. możesz odróżnić stary od nowego za pomocą tagu. może licznik punktów będzie działał.

+0

dzięki za odpowiedź. Zaimplementowałem to tak, jak sugerujesz i działa to całkiem nieźle. Jak sama mówisz, nie jest to najładniejsza implementacja, ale prawdopodobnie najlepsze, co mogę zrobić bez pisania własnych klas PolyLine. – adriaan

+0

Dzięki za odpowiedź. Niestety to prawdopodobnie nie rozwiązuje mojego problemu, ponieważ moja nakładka jest półprzezroczysta. Prawdopodobnie będę musiał dodać mój własny widok na szczycie mapy. – huggie

+0

dziękuję AtomRiot! – james075

1

Klasa MKPolyline dziedziczy MKMultiPoint, który składa się z zestawu punktów. Jest to właściwość, która jest tylko do odczytu, co oznacza, niestety, nie można jej zaktualizować.

+0

Dzięki za odpowiedź Peter. Ma sens. – adriaan

9

Wszystkie nakładki MapKit są niezmienne, więc aby uzyskać zmienność, trzeba zbudować niestandardową nakładkę i przerysować tylko region, który należy zaktualizować.

Przykład można znaleźć w przykładzie przykładowej aplikacji Breadcrumb firmy Apple. Breadcrumb link

+0

Dzięki @SorinA - Jak wspomniałem, poszedłem z podejściem @ AtomRiot w tym czasie. Ale w kolejnej aktualizacji aplikacji sprawdzę przykład Breadcrumb, aby zobaczyć, czy to może być poprawa. – adriaan