2010-07-03 9 views
14

Estoy tratando de crear una superposición de polilínea (MKPolyline) que se actualice periódicamente para simular el movimiento de un objeto. Puedo lograr esto eliminando la superposición anterior, actualizando la polilínea y volviendo a agregar la superposición, pero esto genera parpadeo.cómo actualizar MKPolyline/MKPolylineView?

Para una anotación de puntos (MKPointAnnotation) puede simplemente cambiar sus coordenadas, y la vista se actualizará automáticamente y sin problemas, sin tener que quitar y volver a agregar la anotación.

¿Esto también es posible de alguna manera para una superposición?

+0

He publicado una implementación completa [aquí] [1] [1]: http://stackoverflow.com/questions/11282271/draw-line-on-mkmapview-with-pattern -image/11344230 # 11344230 – EsbenB

Respuesta

15

sí, tendría que agregar una superposición adicional con el conjunto de puntos desde su último punto hasta su siguiente punto. Una vez que creas MKPolyline con tus puntos, no podrás cambiarlo cuando dibuje MKPolylineView sin eliminar el anterior y agregar el que acabas de crear.

puede crear una nueva vista de polilínea con todos los puntos (incluido el nuevo) y agregarlo al mapa pero no eliminar el anterior. luego, una vez que se agrega el nuevo, puede eliminar el anterior más corto. Puede que no sea lindo implementarlo, pero debería eliminar el parpadeo de las actualizaciones. puedes distinguir lo viejo y lo nuevo con una etiqueta. tal vez un conteo de puntos ya que la etiqueta funcionaría.

+0

gracias por su respuesta. Lo he implementado de la manera que sugieres y funciona bastante bien. Como dices, no es la implementación más bonita, pero probablemente sea lo mejor que puedo hacer sin escribir mis propias clases PolyLine. – adriaan

+0

Gracias por la respuesta. Desafortunadamente, esto probablemente no resuelve mi problema, ya que mi superposición es semitransparente. Probablemente tendría que agregar mi propia vista en la parte superior del mapa. – huggie

+0

¡gracias AtomRiot! – james075

1

La clase MKPolyline hereda MKMultiPoint, que consiste en un conjunto de puntos. Esta es una propiedad de solo lectura, lo que significa que, lamentablemente, no puede actualizarla.

+0

Gracias por su respuesta Peter. Tiene sentido. – adriaan

9

Todas las superposiciones de MapKit son inmutables, por lo que para obtener la mutabilidad es necesario crear una superposición personalizada y volver a dibujar solo la región que necesita actualizarse.

Puede encontrar un ejemplo en el ejemplo de aplicación de muestra Breadcrumb de Apple. Breadcrumb link

+0

Gracias @SorinA - Como mencioné, fui con el enfoque de @ AtomRiot en ese momento. Pero en la próxima actualización de la aplicación veré la muestra Breadcrumb para ver si puede ser una mejora. – adriaan