как обновить MKPolyline/MKPolylineView?

Я пытаюсь создать наложение полилинии (MKPolyline), которое периодически обновляется, чтобы имитировать движение объекта. Я могу добиться этого, удалив старое наложение, обновив полилинию и снова добавив наложение, но это приводит к мерцанию.

Для аннотации точки (MKPointAnnotation) вы можете просто изменить ее координату, и вид будет автоматически и плавно обновляться без необходимости удалять и повторно добавлять аннотацию.

Это тоже возможно как-то для наложения?


person adriaan    schedule 03.07.2010    source источник
comment
Я разместил полную реализацию [здесь][1] [1]: stackoverflow.com/questions/11282271/   -  person EsbenB    schedule 05.07.2012


Ответы (3)


да, вам нужно будет добавить дополнительное наложение с набором точек от вашей последней точки до следующей точки. Как только вы создадите MKPolyline с вашими точками, вы не сможете изменить его, когда он отрисовывает MKPolylineView, не удаляя старый и добавляя вновь созданный.

вы можете создать новый полилинейный вид со всеми точками (включая новую) и добавить его на карту, но не удалять старый. затем, как только новый будет добавлен, вы можете удалить более старый, более короткий. Это может быть некрасиво для реализации, но оно должно избавиться от мигания при обновлениях. Вы можете отличить старое и новое с помощью тега. может быть, точка подсчета, поскольку тег будет работать.

person AtomRiot    schedule 05.07.2010
comment
спасибо за Ваш ответ. Я реализовал это так, как вы предлагаете, и это работает очень хорошо. Как вы сказали, не самая красивая реализация, но, вероятно, лучшая, которую я могу сделать без написания собственных классов PolyLine. - person adriaan; 11.07.2010
comment
Спасибо за ответ. К сожалению, это, вероятно, не решит мою проблему, так как мой оверлей полупрозрачный. Мне, вероятно, придется добавить свой собственный вид поверх карты. - person huggie; 07.04.2012

Все наложения MapKit являются неизменяемыми, поэтому для получения изменчивости вам необходимо создать собственное наложение и перерисовать только ту область, которую необходимо обновить.

Вы можете найти пример в примере приложения Breadcrumb от Apple. Ссылка на цепочку

person Sorin Antohi    schedule 03.01.2011
comment
Спасибо @SorinA. Как я уже говорил, в то время я придерживался подхода @AtomRiot. Но в следующем обновлении приложения я проверю образец Breadcrumb, чтобы увидеть, можно ли это улучшить. - person adriaan; 08.03.2011

Класс MKPolyline наследует класс MKMultiPoint, состоящий из набора точек. Это свойство доступно только для чтения, то есть, к сожалению, вы не можете его обновить.

person Peter Zich    schedule 05.07.2010
comment
Спасибо за ваш ответ, Питер. Имеет смысл. - person adriaan; 11.07.2010