Class

MKMapView

An MKMapView object provides an embeddable map interface, similar to the one provided by the Maps application. You use this class as-is to display map information and to manipulate the map contents from your application. You can center the map on a given coordinate, specify the size of the area you want to display, and annotate the map with custom information.

Overview

When you initialize a map view, you should specify the initial region for that map to display. You do this by setting the region property of the map. A region is defined by a center point and a horizontal and vertical distance, referred to as the span. The span defines how much of the map at the given point should be visible and is also how you set the zoom level. Specifying a large span results in the user seeing a wide geographical area and corresponds to a low zoom level. Specifying a small span results in the user seeing a more narrow geographical area and corresponds to a higher zoom level.

In addition to setting the span programmatically, the MKMapView class supports many standard interactions for changing the position and zoom level of the map. In particular, map views support flick and pinch gestures for scrolling around the map and zooming in and out. Support for these gestures is enabled by default but can also be disabled using the isScrollEnabled and isZoomEnabled properties.

You can also use projected map coordinates instead of regions to specify some values. When you project the curved surface of the globe onto a flat surface, you get a two-dimensional version of a map where longitude lines appear to be parallel. To specify locations and distances, you use the MKMapPoint, MKMapSize, and MKMapRect data types.

Although you should not subclass the MKMapView class itself, you can get information about the map view’s behavior by providing a delegate object. The map view calls the methods of your custom delegate to let it know about changes in the map status and to coordinate the display of custom annotations, which are described in more detail in Annotating the Map. The delegate object can be any object in your application as long as it conforms to the MKMapViewDelegate protocol. For more information about implementing the delegate object, see MKMapViewDelegate.

Annotating the Map

The MKMapView class supports the ability to annotate the map with custom information. Because a map may have potentially large numbers of annotations, map views differentiate between the annotation objects used to manage the annotation data and the view objects for presenting that data on the map.

An annotation object is any object that conforms to the MKAnnotation protocol. Annotation objects are typically implemented using existing classes in your application’s data model. This allows you to manipulate the annotation data directly but still make it available to the map view. Each annotation object contains information about the annotation’s location on the map along with descriptive information that can be displayed in a callout.

The presentation of annotation objects on the screen is handled by an annotation view, which is an instance of the MKAnnotationView class. An annotation view is responsible for presenting the annotation data in a way that makes sense. For example, the Maps application uses a pin icon to denote specific points of interest on a map. (The Map Kit framework offers the MKPinAnnotationView class for similar annotations in your own applications.) You could also create annotation views that cover larger portions of the map.

Because annotation views are needed only when they are onscreen, the MKMapView class provides a mechanism for queueing annotation views that are not in use. Annotation views with a reuse identifier can be detached and queued internally by the map view when they move offscreen. This feature improves memory use by keeping only a small number of annotation views in memory at once and by recycling the views you do have. It also improves scrolling performance by alleviating the need to create new views while the map is scrolling.

When configuring your map interface, you should add all of your annotation objects right away. The map view uses the coordinate data in each annotation object to determine when the corresponding annotation view needs to appear onscreen. When an annotation moves onscreen, the map view asks its delegate to create a corresponding annotation view. If your application has different types of annotations, it can define different annotation view classes to represent each type.

Adding Overlays to the Map

You can use overlays to layer content over a wide portion of the map. An overlay object is any object that conforms to the MKOverlay protocol. An overlay object is a data object that contains the points needed to specify the shape and size of the overlay and its location on the map. Overlays can represent shapes such as circles, rectangles, multi-segment lines, and simple or complex polygons. You can also define your own custom overlays to represent other shapes.

In iOS 7 and macOS 10.9 and later, the presentation of an overlay is handled by an overlay renderer object, which is an instance of the MKOverlayRenderer class. The job of the renderer is to draw the overlay’s content onto the screen when asked to do so by the map view. For example, if you have a simple overlay that represents a bus route, you could use a polyline renderer to draw the line segments that trace the route of the bus. You could also define a custom renderer that draws both the bus route and icons at the location of each bus stop. When specifying overlays, you can add them to specific levels of the map, which allows them to be rendered above or below other types of map content. Prior to iOS 7, overlays are drawn on onscreen using overlay views, which are instances of the MKOverlayView class.

When configuring your map interface, you can add overlay objects at any time. The map view uses the data in each overlay object to determine when the corresponding overlay view needs to appear onscreen. When an overlay moves onscreen, the map view asks its delegate to create a corresponding overlay renderer.

Symbols

Accessing Map Properties

var mapType: MKMapType

The type of data displayed by the map view.

var isZoomEnabled: Bool

A Boolean value that determines whether the user may use pinch gestures to zoom in and out of the map.

var isScrollEnabled: Bool

A Boolean value that determines whether the user may scroll around the map.

var isPitchEnabled: Bool

A Boolean value indicating whether the map camera’s pitch information is used.

var isRotateEnabled: Bool

A Boolean value indicating whether the map camera’s heading information is used.

Accessing the Delegate

var delegate: MKMapViewDelegate?

The receiver’s delegate.

Manipulating the Visible Portion of the Map

var region: MKCoordinateRegion

The area currently displayed by the map view.

func setRegion(MKCoordinateRegion, animated: Bool)

Changes the currently visible region and optionally animates the change.

var centerCoordinate: CLLocationCoordinate2D

The map coordinate at the center of the map view.

func setCenter(CLLocationCoordinate2D, animated: Bool)

Changes the center coordinate of the map and optionally animates the change.

func showAnnotations([MKAnnotation], animated: Bool)

Sets the visible region so that the map displays the specified annotations.

var visibleMapRect: MKMapRect

The area currently displayed by the map view.

func setVisibleMapRect(MKMapRect, animated: Bool)

Changes the currently visible portion of the map and optionally animates the change.

func setVisibleMapRect(MKMapRect, edgePadding: UIEdgeInsets, animated: Bool)

Changes the currently visible portion of the map, allowing you to specify additional space around the edges.

Configuring the Map’s Appearance

var camera: MKMapCamera

The camera used for determining the appearance of the map.

func setCamera(MKMapCamera, animated: Bool)

Changes the camera used for determining the map’s viewing parameters and optionally animates the change.

var showsPointsOfInterest: Bool

A Boolean indicating whether the map displays point-of-interest information.

var showsBuildings: Bool

A Boolean indicating whether the map displays extruded building information.

var showsCompass: Bool

A Boolean indicating whether the map displays a compass control.

var showsZoomControls: Bool

A Boolean indicating whether the map displays zoom controls.

var showsScale: Bool

A Boolean indicating whether the map shows scale information.

var showsTraffic: Bool

A Boolean value indicating whether the map displays traffic information.

Displaying the User’s Location

var showsUserLocation: Bool

A Boolean value indicating whether the map should try to display the user’s location.

var isUserLocationVisible: Bool

A Boolean value indicating whether the device’s current location is visible in the map view.

var userLocation: MKUserLocation

The annotation object representing the user’s current location.

var userTrackingMode: MKUserTrackingMode

The mode used to track the user location.

func setUserTrackingMode(MKUserTrackingMode, animated: Bool)

Sets the mode used to track the user location with optional animation.

Annotating the Map

var annotations: [MKAnnotation]

The complete list of annotations associated with the receiver.

func addAnnotation(MKAnnotation)

Adds the specified annotation to the map view.

func addAnnotations([MKAnnotation])

Adds an array of annotation objects to the map view.

func removeAnnotation(MKAnnotation)

Removes the specified annotation object from the map view.

func removeAnnotations([MKAnnotation])

Removes an array of annotation objects from the map view.

func view(for: MKAnnotation)

Returns the annotation view associated with the specified annotation object, if any.

func annotations(in: MKMapRect)

Returns the annotation objects located in the specified map rectangle.

var annotationVisibleRect: CGRect

The visible rectangle where annotation views are currently being displayed.

func dequeueReusableAnnotationView(withIdentifier: String)

Returns a reusable annotation view located by its identifier.

Managing Annotation Selections

var selectedAnnotations: [MKAnnotation]

The annotations that are currently selected.

func selectAnnotation(MKAnnotation, animated: Bool)

Selects the specified annotation and displays a callout view for it.

func deselectAnnotation(MKAnnotation?, animated: Bool)

Deselects the specified annotation and hides its callout view.

Accessing Overlays

var overlays: [MKOverlay]

The overlay objects currently associated with the map view.

func overlays(in: MKOverlayLevel)

The overlay objects in the specified level of the map.

func renderer(for: MKOverlay)

Returns the renderer object used to draw the contents of the specified overlay object.

Adding and Inserting Overlays

func add(MKOverlay, level: MKOverlayLevel)

Adds the overlay object to the map at the specified level.

func addOverlays([MKOverlay], level: MKOverlayLevel)

Adds an array of overlay objects to the map at the specified level.

func add(MKOverlay)

Adds a single overlay object to the map.

func addOverlays([MKOverlay])

Adds an array of overlay objects to the map.

func insert(MKOverlay, at: Int, level: MKOverlayLevel)

Inserts an overlay object into the level at the specified index.

func insert(MKOverlay, at: Int)

Inserts an overlay object into the list associated with the map.

func insert(MKOverlay, above: MKOverlay)

Inserts one overlay object on top of another.

func insert(MKOverlay, below: MKOverlay)

Inserts one overlay object below another.

func exchangeOverlay(MKOverlay, with: MKOverlay)

Exchanges the positions of the two overlay objects.

func exchangeOverlay(at: Int, withOverlayAt: Int)

Exchanges the position of two overlay objects.

Removing Overlays

func remove(MKOverlay)

Removes a single overlay object from the map.

func removeOverlays([MKOverlay])

Removes one or more overlay objects from the map.

Converting Map Coordinates

func convert(CLLocationCoordinate2D, toPointTo: UIView?)

Converts a map coordinate to a point in the specified view.

func convert(CGPoint, toCoordinateFrom: UIView?)

Converts a point in the specified view’s coordinate system to a map coordinate.

func convertRegion(MKCoordinateRegion, toRectTo: UIView?)

Converts a map region to a rectangle in the specified view.

func convert(CGRect, toRegionFrom: UIView?)

Converts a rectangle in the specified view’s coordinate system to a map region.

Adjusting Map Regions and Rectangles

func regionThatFits(MKCoordinateRegion)

Adjusts the aspect ratio of the specified region to ensure that it fits in the map view’s frame.

func mapRectThatFits(MKMapRect)

Adjusts the aspect ratio of the specified map rectangle to ensure that it fits in the map view’s frame.

func mapRectThatFits(MKMapRect, edgePadding: UIEdgeInsets)

Adjusts the aspect ratio of the specified map rectangle, incorporating the specified inset values.

Constants

MKMapType

The type of map to display.

MKUserTrackingMode

The mode used to track the user location on the map.

MKOverlayLevel

Constants indicating the position of overlays relative to other content.