How to move a MKAnnotation without adding/removing it from the map? How to move a MKAnnotation without adding/removing it from the map? objective-c objective-c

How to move a MKAnnotation without adding/removing it from the map?


In Swift 4.0 and IOS 11.0, I just add dynamic attribute to the coordinate property of child class of MKAnnotation class and it works: All Annotations on MapView update their location if coordinate value of MKAnnotation objects are updated:

class CarAnnotation: NSObject, MKAnnotation {    @objc dynamic var coordinate: CLLocationCoordinate2D    //Add your custom code here}


I found a pretty simple method. I wanted to update my player's position smoothly without removing and then re-adding the player annotation. This works well for pre-iOS4 apps, and what it does is both move the pin and center the map on the pin's new location:

[UIView beginAnimations:nil context:NULL];[UIView setAnimationDuration:0.5];[UIView setAnimationCurve:UIViewAnimationCurveLinear];[player setCoordinate:aLoc.coordinate];[mapView setCenterCoordinate:aLoc.coordinate animated:NO];[UIView commitAnimations];

Here's the same thing but using the recommended block feature for iOS4:

[UIView animateWithDuration:0.5 animations:^{    [player setCoordinate:aLoc.coordinate];    [mapView setCenterCoordinate:aLoc.coordinate animated:NO];}];


It is indeed possible without removing and adding the annotation off-course.

You'll need to observe your MKAnnotation's coordinate and update the MKAnnotationView's position when it changes. Alternatively you can (and this is probably the more elegant way of doing it) derive your own MKAnnotation and MKAnnotationView and make them "movable".

See Moving-MKAnnotationView for a detailed example which also animates the position of the annotation.