See the MGLMapViewDelegate method -mapView:annotationCanShowCallout: and similar methods for allowing interaction with a callout (example).

Displaying annotations

There are two basic ways to display the annotations you’ve added to a map, each with their own tradeoffs.

Annotation Images (MGLAnnotationImage)

Annotation images are the quickest and most performant way to display annotations, but are also the most basic.

By default, annotations added to the map are displayed with a red pin (example). To use custom images, you can implement MGLMapViewDelegate-mapView:imageForAnnotation: (example).

Pros

The easiest way to display a marker on a map

Easily customizable with any UIImage

High performance, as the images are rendered directly in OpenGL

Cons

Annotation images are purely static and cannot be animated

No control over z-ordering

Limits to the number and size of images you can add

Annotation Views (MGLAnnotationView)

If you’re looking to add custom UIViews or have annotations that are dynamic or animatable, consider an MGLAnnotationView instead of an MGLAnnotationImage (example).

Annotation views have significant advantages over annotation images when you need every annotation to be unique. For example, annotation views are ideal for showing user locations on a map using high-resolution profile pictures.

To use annotation views, implement MGLMapViewDelegate-mapView:viewForAnnotation and provide a custom MGLAnnotationView (UIView) subclass.

Pros

Custom, native UIViews

No limit on style or image size

Full support for animations

Relative control over z-ordering using the zPosition property on CALayer