Class

MKMap​View

An MKMap​View 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 MKMap​View 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 is​Scroll​Enabled and is​Zoom​Enabled 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 MKMap​Point, MKMap​Size, and MKMap​Rect data types.

Although you should not subclass the MKMap​View 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 MKMap​View​Delegate protocol. For more information about implementing the delegate object, see MKMap​View​Delegate.

Annotating the Map

The MKMap​View 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 MKAnnotation​View 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 MKPin​Annotation​View 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 MKMap​View 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 MKOverlay​Renderer 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 MKOverlay​View 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 map​Type:​ MKMap​Type

The type of data displayed by the map view.

var is​Zoom​Enabled:​ Bool

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

var is​Scroll​Enabled:​ Bool

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

var is​Pitch​Enabled:​ Bool

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

var is​Rotate​Enabled:​ Bool

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

Accessing the Delegate

Manipulating the Visible Portion of the Map

var region:​ MKCoordinate​Region

The area currently displayed by the map view.

func set​Region(MKCoordinate​Region, animated:​ Bool)

Changes the currently visible region and optionally animates the change.

var center​Coordinate:​ CLLocation​Coordinate2D

The map coordinate at the center of the map view.

func set​Center(CLLocation​Coordinate2D, animated:​ Bool)

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

func show​Annotations([MKAnnotation], animated:​ Bool)

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

var visible​Map​Rect:​ MKMap​Rect

The area currently displayed by the map view.

func set​Visible​Map​Rect(MKMap​Rect, animated:​ Bool)

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

func set​Visible​Map​Rect(MKMap​Rect, edge​Padding:​ UIEdge​Insets, 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:​ MKMap​Camera

The camera used for determining the appearance of the map.

func set​Camera(MKMap​Camera, animated:​ Bool)

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

var shows​Points​Of​Interest:​ Bool

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

var shows​Buildings:​ Bool

A Boolean indicating whether the map displays extruded building information.

var shows​Compass:​ Bool

A Boolean indicating whether the map displays a compass control.

var shows​Zoom​Controls:​ Bool

A Boolean indicating whether the map displays zoom controls.

var shows​Scale:​ Bool

A Boolean indicating whether the map shows scale information.

var shows​Traffic:​ Bool

A Boolean value indicating whether the map displays traffic information.

Displaying the User’s Location

var shows​User​Location:​ Bool

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

var is​User​Location​Visible:​ Bool

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

var user​Location:​ MKUser​Location

The annotation object representing the user’s current location.

var user​Tracking​Mode:​ MKUser​Tracking​Mode

The mode used to track the user location.

func set​User​Tracking​Mode(MKUser​Tracking​Mode, 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 add​Annotation(MKAnnotation)

Adds the specified annotation to the map view.

func add​Annotations([MKAnnotation])

Adds an array of annotation objects to the map view.

func remove​Annotation(MKAnnotation)

Removes the specified annotation object from the map view.

func remove​Annotations([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:​ MKMap​Rect)

Returns the annotation objects located in the specified map rectangle.

var annotation​Visible​Rect:​ CGRect

The visible rectangle where annotation views are currently being displayed.

func dequeue​Reusable​Annotation​View(with​Identifier:​ String)

Returns a reusable annotation view located by its identifier.

Managing Annotation Selections

var selected​Annotations:​ [MKAnnotation]

The annotations that are currently selected.

func select​Annotation(MKAnnotation, animated:​ Bool)

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

func deselect​Annotation(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:​ MKOverlay​Level)

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:​ MKOverlay​Level)

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

func add​Overlays([MKOverlay], level:​ MKOverlay​Level)

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 add​Overlays([MKOverlay])

Adds an array of overlay objects to the map.

func insert(MKOverlay, at:​ Int, level:​ MKOverlay​Level)

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 exchange​Overlay(MKOverlay, with:​ MKOverlay)

Exchanges the positions of the two overlay objects.

func exchange​Overlay(at:​ Int, with​Overlay​At:​ Int)

Exchanges the position of two overlay objects.

Removing Overlays

func remove(MKOverlay)

Removes a single overlay object from the map.

func remove​Overlays([MKOverlay])

Removes one or more overlay objects from the map.

Converting Map Coordinates

func convert(CLLocation​Coordinate2D, to​Point​To:​ UIView?)

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

func convert(CGPoint, to​Coordinate​From:​ UIView?)

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

func convert​Region(MKCoordinate​Region, to​Rect​To:​ UIView?)

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

func convert(CGRect, to​Region​From:​ UIView?)

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

Adjusting Map Regions and Rectangles

func region​That​Fits(MKCoordinate​Region)

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

func map​Rect​That​Fits(MKMap​Rect)

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

func map​Rect​That​Fits(MKMap​Rect, edge​Padding:​ UIEdge​Insets)

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

Constants

MKMap​Type

The type of map to display.

MKUser​Tracking​Mode

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

MKOverlay​Level

Constants indicating the position of overlays relative to other content.