Hallo iedereen, Leo hier. The topic today is how to remove/suppress the Default MapKit user location callout annotation.
We will explore a quick tip about MapKit. MapKit has a handy property that you can turn on to show the user location on the map called showsUserLocation
. When you set it to true it shows the native user location pin on the map. Very nice, right?
Yes, it is! But the problem is it also comes with a callout annotation that has a default user image in it and that may not be desirable.
Today let’s find out how to add the user location to your map, and how to remove the default callout.
Let’s code! But first…
The Painting of The Day
The painting I chose is called The Swing a 1767 art piece from Jean-Honore Fragonard.
Best known for his flourishingly hedonistic scenes, Jean Honoré Fragonard was a French Rococo painter and printmaker, who was one of the most prolific painters of the Ancién Regime. He showed a great talent for art at an early age and was sent to study with the Rococo painter Francois Boucher, who soon trusted him enough to paint replicas of his works.
I chose this painting because in all these years I never shared a Rococo-style painting. So I had to fill that gap!
The Problem – How to remove/suppress the Default MapKit User Location Callout Annotation
You want to use the user location map pin annotation but you don’t want the default callout.
This will be a very quick post. The current location map pin is this:
To enable it in your maps using MapKit. You just need to set the showsUserLocation
property in your MKMapView
. Like this:
mapView.showsUserLocation = true
Simple as it!
When you tap it, by default it will show this default map annotation callout:
Our goal today is to remove that behavior and don’t show this callout. To achieve that we need to do a couple of things:
- Use the
MKMapViewDelegate
to intercept thedidSelect
. - In the
didSelect
we search forMKUserLocation
annotation. - If the annotation inside the view is the
MKUserLocation
we deselect the annotation and return doing nothing.
The example is below:
internal func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) { if view.annotation is MKUserLocation { mapView.deselectAnnotation(view.annotation, animated: false) return } // all other didSelect annotation logic }
And that’s it!
Summary – How to remove/suppress the Default MapKit User Location Callout Annotation
Today we learn how to add the user’s current location map pin to the map view and how to remove the default annotation callout of it. Searching for this problem I wasn’t able to find any other good solution for this problem. If you have a better one, please share with me!
That’s all my people, I hope you liked reading this article as much as I enjoyed writing it. If you want to support this blog you can Buy Me a Coffee or leave a comment saying hello. You can also sponsor posts and I’m open to freelance writing!
You can reach me on LinkedIn or Twitter and send me an e-mail through the contact page.
Thanks for reading and… That’s all folks.
Credits: