I'm designing an app using Swift for a food truck. I want to use MapKit to show a pin on the live location of the truck so one can look at the app to see it moving in realtime. I was able to get the server-side element set up using PHP/MySQL. Currently, the app makes a HTTP request every 3 seconds.
How should I go about animating the moving pin (or other image)? I tried a few methods already (if you have others, please suggest!):
- I removed the pin and quickly added a new one in my HTTP function. While this works, I would prefer a smooth animation, not a flashing, jerky pin.
- I subclassed
MKMapViewDelgate
like with adidAddAnnotationViews
delegate that animates the pin's frame usingUIView.animateWithDuration
as suggested here. Animation only occurred when the map was initially loaded. Also, I have no idea how this would work with coordinates, since it involves frames. I subclassed
MKAnnotation
with a modifiablevar coordinate
. In my HTTP function, I changed the coordinate. EDIT: This now works since I properly refreshed the mapView (thanks @Paulw11). However, I still have two main issues:- There's no linear animation, which I desire to better simulate real-time movement. How would I go about animating the pin's coordinates? Should I use UIView, like in method 2, a fast NSTimer, or something else?
- Due to using the
setCenterCoordinate
function to forcibly refresh the map, the map cancels any current touches. How do I detect if there's any touches on the MapView so I can prevent the forced update?