---
title: MKMapViewDelegate
framework: mapkit
role: symbol
role_heading: Protocol
path: mapkit/mkmapviewdelegate
---

# MKMapViewDelegate

Optional methods that you use to receive map-related update messages.

## Declaration

```swift
@MainActor protocol MKMapViewDelegate : NSObjectProtocol
```

## Overview

Overview Because many map operations require the MKMapView class to load data asynchronously, the map view calls these methods to notify your app when specific operations complete. The map view also uses these methods to request annotation and overlay views, and to manage interactions with those views. Before releasing an MKMapView object that you set a delegate for, remember to set that object’s delegate property to nil. MapKit calls all of your delegate methods on the app’s main thread.

## Topics

### Responding to map position changes

- [mapView(_:regionWillChangeAnimated:)](mapkit/mkmapviewdelegate/mapview(_:regionwillchangeanimated:).md)
- [mapViewDidChangeVisibleRegion(_:)](mapkit/mkmapviewdelegate/mapviewdidchangevisibleregion(_:).md)
- [mapView(_:regionDidChangeAnimated:)](mapkit/mkmapviewdelegate/mapview(_:regiondidchangeanimated:).md)

### Loading the map data

- [mapViewWillStartLoadingMap(_:)](mapkit/mkmapviewdelegate/mapviewwillstartloadingmap(_:).md)
- [mapViewDidFinishLoadingMap(_:)](mapkit/mkmapviewdelegate/mapviewdidfinishloadingmap(_:).md)
- [mapViewDidFailLoadingMap(_:withError:)](mapkit/mkmapviewdelegate/mapviewdidfailloadingmap(_:witherror:).md)
- [mapViewWillStartRenderingMap(_:)](mapkit/mkmapviewdelegate/mapviewwillstartrenderingmap(_:).md)
- [mapViewDidFinishRenderingMap(_:fullyRendered:)](mapkit/mkmapviewdelegate/mapviewdidfinishrenderingmap(_:fullyrendered:).md)

### Tracking the user’s location

- [mapViewWillStartLocatingUser(_:)](mapkit/mkmapviewdelegate/mapviewwillstartlocatinguser(_:).md)
- [mapViewDidStopLocatingUser(_:)](mapkit/mkmapviewdelegate/mapviewdidstoplocatinguser(_:).md)
- [mapView(_:didUpdate:)](mapkit/mkmapviewdelegate/mapview(_:didupdate:).md)
- [mapView(_:didFailToLocateUserWithError:)](mapkit/mkmapviewdelegate/mapview(_:didfailtolocateuserwitherror:).md)
- [mapView(_:didChange:animated:)](mapkit/mkmapviewdelegate/mapview(_:didchange:animated:).md)

### Managing annotation views

- [mapView(_:viewFor:)](mapkit/mkmapviewdelegate/mapview(_:viewfor:)-8humz.md)
- [mapView(_:didAdd:)](mapkit/mkmapviewdelegate/mapview(_:didadd:)-44xon.md)
- [mapView(_:annotationView:calloutAccessoryControlTapped:)](mapkit/mkmapviewdelegate/mapview(_:annotationview:calloutaccessorycontroltapped:).md)
- [mapView(_:clusterAnnotationForMemberAnnotations:)](mapkit/mkmapviewdelegate/mapview(_:clusterannotationformemberannotations:).md)

### Dragging an annotation view

- [mapView(_:annotationView:didChange:fromOldState:)](mapkit/mkmapviewdelegate/mapview(_:annotationview:didchange:fromoldstate:).md)

### Selecting annotations and annotations views

- [mapView(_:didSelect:)](mapkit/mkmapviewdelegate/mapview(_:didselect:)-41by3.md)
- [mapView(_:didDeselect:)](mapkit/mkmapviewdelegate/mapview(_:diddeselect:)-yo7q.md)
- [mapView(_:didDeselect:)](mapkit/mkmapviewdelegate/mapview(_:diddeselect:)-4ldss.md)
- [mapView(_:didSelect:)](mapkit/mkmapviewdelegate/mapview(_:didselect:)-9km43.md)
- [selectableMapFeatures](mapkit/mkmapview/selectablemapfeatures.md)

### Managing the display of overlays

- [mapView(_:selectionAccessoryFor:)](mapkit/mkmapviewdelegate/mapview(_:selectionaccessoryfor:).md)
- [mapView(_:rendererFor:)](mapkit/mkmapviewdelegate/mapview(_:rendererfor:).md)
- [mapView(_:didAdd:)](mapkit/mkmapviewdelegate/mapview(_:didadd:)-793gj.md)
- [mapView(_:viewFor:)](mapkit/mkmapviewdelegate/mapview(_:viewfor:)-6j267.md)
- [mapView(_:didAddOverlayViews:)](mapkit/mkmapviewdelegate/mapview(_:didaddoverlayviews:).md)

## Relationships

### Inherits From

- [NSObjectProtocol](objectivec/nsobjectprotocol.md)

## See Also

### Customizing the map view behavior

- [delegate](mapkit/mkmapview/delegate.md)
