views:

110

answers:

2

I am trying to create a polyline (MKPolyline) overlay that updates periodically, to simulate the movement of an object. I can achieve this by removing the old overlay, updating the polyline and adding the overlay again, but this leads to flickering.

For a point annotation (MKPointAnnotation) you can simply change its coordinate, and the view will be updated automatically and smoothly without having to remove and re-add the annotation.

Is this also possible somehow for an overlay?

A: 

The MKPolyline class inherits MKMultiPoint, which consists of a set of points. This is a property that is read-only, meaning, unfortunately, you can't update it.

Peter Zich
Thanks for your answer Peter. Makes sense.
adriaan
+1  A: 

yea, you would have to add an additional overlay with the point set of from your last point to your next point. Once you create the MKPolyline with your points, your not able to change it when it draws the MKPolylineView without removing the old and adding the newly created one.

you could create a new polyline view with all the points (including the new one) and add it to the map but do not remove the older one. then once the new one is added, you can remove the older shorter one. It might not be pretty to implement but it should get rid of the flashing on updates. you can distinguish the old and the new with a tag. maybe a point count as the tag would work.

AtomRiot
@AtomRiot, thanks for your answer. I've implemented it the way you suggest and that's working pretty nicely. As you say, not the prettiest implementation, but probably the best I can do without writing my own PolyLine classes.
adriaan