Reputation: 2225
I'm implementing a map feature in my app where I allow the user to set their current location by panning around.
All this time, I want to have an MKAnnotation
in the centerCoordinate
. So what I want to do is keep track of when the map's centerCoordinate changes and change the annotation's coordinate correctly. The behaviour would be similar to that of Uber, Hailo and others.
I tried a time based implementation where every 0.00001s the centerCoordinate
would be checked and the annotation would also be moved. But if the map isn't flicked gently, the annotation jumps from one place to another which doesn't make for a good UI.
Another implementation I tried is by way of gesture recognisers and the delegate methods of MKMapView
(regionDidChange
/regionWillChange
). This, again, makes for a very abrupt transition.
Can anyone please advise me on how to do this better?
Upvotes: 5
Views: 3209
Reputation:
I suggest not using an actual id<MKAnnotation>
at all (at least for this "current location setting" mode).
Instead:
UIImageView
) containing an image of a pin (or whatever icon you like) in front of the map view. UIImageView
, set its content mode to "center" and background color to "clear" (default is clear).mapView.centerCoordinate
in the regionDidChangeAnimated:
MKMapViewDelegate method (or pan/pinch gesture recognizers) or only when the user says they're done positioning. I don't recommend using a timer (especially every 0.00001s) to query the current center coordinate.Upvotes: 27