iOS Developer Library — Pre-Release

Developer

MapKit Framework Reference MKMapView Class Reference

Options
Deployment Target:

On This Page
Language:

MKMapView

Inheritance


Import Statement


Swift

import MapKit

Objective-C

@import MapKit;

Availability


Available in iOS 3.0 and later.

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.

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 scrollEnabled and zoomEnabled 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 Protocol Reference.

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 OS X v10.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.

  • mapType mapType Property

    The type of data displayed by the map view.

    Declaration

    Swift

    var mapType: MKMapType

    Objective-C

    @property(nonatomic) MKMapType mapType

    Discussion

    Changing the value in this property may cause the receiver to begin loading new map content. For example, changing from MKMapTypeStandard to MKMapTypeSatellite might cause it to begin loading the satellite imagery needed for the map. If new data is needed, however, it is loaded asynchronously and appropriate messages are sent to the receiver’s delegate indicating the status of the operation.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

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

    Declaration

    Swift

    var zoomEnabled: Bool

    Objective-C

    @property(nonatomic, getter=isZoomEnabled) BOOL zoomEnabled

    Discussion

    This property controls only user interactions with the map. If you set the value of this property to NOfalse, you may still change the zoom level programmatically by changing the value in the region property.

    The default value of this property is YEStrue.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

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

    Declaration

    Swift

    var scrollEnabled: Bool

    Objective-C

    @property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled

    Discussion

    This property controls only user interactions with the map. If you set the value of this property to NOfalse, you may still change the map location programmatically by changing the value in the region property.

    The default value of this property is YEStrue.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

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

    Declaration

    Swift

    var pitchEnabled: Bool

    Objective-C

    @property(nonatomic, getter=isPitchEnabled) BOOL pitchEnabled

    Discussion

    When this property is set to YEStrue and a valid camera is associated with the map, the camera’s pitch angle is used to tilt the plane of the map. When this property is set to NOfalse, the camera’s pitch angle is ignored and the map is always displayed as if the user is looking straight down onto it.

    In an app, always check the value of this property to determine whether a map can support 3D.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.

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

    Declaration

    Swift

    var rotateEnabled: Bool

    Objective-C

    @property(nonatomic, getter=isRotateEnabled) BOOL rotateEnabled

    Discussion

    When this property is set to YEStrue and a valid camera is associated with the map, the camera’s heading angle is used to rotate the plane of the map around its center point. When this property is set to NOfalse, the camera’s heading angle is ignored and the map is always oriented so that true north is situated at the top of the map view.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.

  • delegate delegate Property

    The receiver’s delegate.

    Declaration

    Swift

    weak var delegate: MKMapViewDelegate!

    Objective-C

    @property(nonatomic, weak) id< MKMapViewDelegate > delegate

    Discussion

    A map view sends messages to its delegate regarding the loading of map data and changes in the portion of the map being displayed. The delegate also manages the annotation views used to highlight points of interest on the map.

    The delegate should implement the methods of the MKMapViewDelegate protocol.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • region region Property

    The area currently displayed by the map view.

    Declaration

    Swift

    var region: MKCoordinateRegion

    Objective-C

    @property(nonatomic) MKCoordinateRegion region

    Discussion

    The region encompasses both the latitude and longitude point on which the map is centered and the span of coordinates to display. The span values provide an implicit zoom value for the map. The larger the displayed area, the lower the amount of zoom. Similarly, the smaller the displayed area, the greater the amount of zoom.

    Changing only the center coordinate of the region can still cause the span to change implicitly. The span might change because the distances represented by a span change at different latitudes and longitudes and the map view may need to adjust the span to account for the new location. If you want to change the center coordinate without changing the zoom level, use the centerCoordinate instead.

    Changing the value of this property updates the map view immediately. When setting this property, the map may adjust the new region value so that it fits the visible area of the map precisely. This is normal and is done to ensure that the value in this property always reflects the visible portion of the map. However, it does mean that if you get the value of this property right after setting it, the returned value may not match the value you set. (You can use the regionThatFits: method to determine the region that will actually be set by the map.)

    If you want to animate the change in region, use the setRegion:animated: method instead.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • Changes the currently visible region and optionally animates the change.

    Declaration

    Swift

    func setRegion(_ region: MKCoordinateRegion, animated animated: Bool)

    Objective-C

    - (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated

    Parameters

    region

    The new region to display in the map view.

    animated

    Specify YEStrue if you want the map view to animate the transition to the new region or NOfalse if you want the map to center on the specified region immediately.

    Discussion

    Changing just the center coordinate of the region can still cause the span values to change implicitly. The span values might change because that the distances represented by a span change at different latitudes and longitudes and the map view may need to adjust the span to account for the new location. If you want to change the center coordinate without changing the zoom level, use the setCenterCoordinate:animated: instead.

    When setting a new region, the map may adjust the value in the region parameter so that it fits the visible area of the map precisely. This adjustment is normal and is done to ensure that the value in the region property always reflects the visible portion of the map. However, it does mean that if you get the value of that property right after calling this method, the returned value may not match the value you set. (You can use the regionThatFits: method to determine the region that will actually be set by the map.)

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • The map coordinate at the center of the map view.

    Declaration

    Swift

    var centerCoordinate: CLLocationCoordinate2D

    Objective-C

    @property(nonatomic) CLLocationCoordinate2D centerCoordinate

    Discussion

    Changing the value in this property centers the map on the new coordinate without changing the current zoom level. It also updates the values in the region property to reflect the new center coordinate and the new span values needed to maintain the current zoom level.

    Changing the value of this property updates the map view immediately. If you want to animate the change, use the setCenterCoordinate:animated: method instead.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

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

    Declaration

    Swift

    func setCenterCoordinate(_ coordinate: CLLocationCoordinate2D, animated animated: Bool)

    Objective-C

    - (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated

    Parameters

    coordinate

    The new center coordinate for the map.

    animated

    Specify YEStrue if you want the map view to scroll to the new location or NOfalse if you want the map to display the new location immediately.

    Discussion

    Changing the center coordinate centers the map on the new coordinate without changing the current zoom level. It also updates the value in the region property to reflect the new center coordinate and the new span values needed to maintain the current zoom level.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

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

    Declaration

    Swift

    func showAnnotations(_ annotations: [AnyObject]!, animated animated: Bool)

    Objective-C

    - (void)showAnnotations:(NSArray *)annotations animated:(BOOL)animated

    Parameters

    annotations

    The annotations that you want to be visible in the map.

    animated

    YEStrue if you want the map region change to be animated, or NOfalse if you want the map to display the new region immediately without animations.

    Discussion

    Calling this method updates the value in the region property and potentially other properties to reflect the new map region.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.

  • The area currently displayed by the map view.

    Declaration

    Swift

    var visibleMapRect: MKMapRect

    Objective-C

    @property(nonatomic) MKMapRect visibleMapRect

    Discussion

    This property represents the same basic information as the region property but specified as a map rectangle instead of a region.

    Changing the value of this property updates the map view immediately. If you want to animate the change, use the setVisibleMapRect:animated: method instead.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

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

    Declaration

    Swift

    func setVisibleMapRect(_ mapRect: MKMapRect, animated animate: Bool)

    Objective-C

    - (void)setVisibleMapRect:(MKMapRect)mapRect animated:(BOOL)animate

    Parameters

    mapRect

    The map rectangle to make visible in the map view.

    animate

    Specify YEStrue if you want the map view to animate the transition to the new map rectangle or NOfalse if you want the map to center on the specified rectangle immediately.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

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

    Declaration

    Swift

    func setVisibleMapRect(_ mapRect: MKMapRect, edgePadding insets: UIEdgeInsets, animated animate: Bool)

    Objective-C

    - (void)setVisibleMapRect:(MKMapRect)mapRect edgePadding:(UIEdgeInsets)insets animated:(BOOL)animate

    Parameters

    mapRect

    The map rectangle to make visible in the map view.

    insets

    The amount of additional space (measured in screen points) to make visible around the specified rectangle.

    animate

    Specify YEStrue if you want the map view to animate the transition to the new map rectangle or NOfalse if you want the map to center on the specified rectangle immediately.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

  • camera camera Property

    The camera used for determining the appearance of the map.

    Declaration

    Swift

    @NSCopying var camera: MKMapCamera!

    Objective-C

    @property(nonatomic, copy) MKMapCamera *camera

    Discussion

    A camera object defines a point above the map’s surface from which to view the map. Applying a camera to a map can have the effect of giving the map a 3D-like appearance. You can use a camera to rotate the map so that it is oriented to match the user’s heading or to apply a pitch angle to tilt the plane of the map. (You can check the map’s pitchEnabled property to determine whether the map can be pitched.)

    Assigning a new camera to this property updates the map immediately and without animating the change. If you want to animate changes in camera position, use the setCamera:animated: method instead.

    You must not set this property to nil. To restore the map to a flat appearance, apply a camera with a pitch angle of 0, which yields a camera looking straight down onto the map surface.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.

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

    Declaration

    Swift

    func setCamera(_ camera: MKMapCamera!, animated animated: Bool)

    Objective-C

    - (void)setCamera:(MKMapCamera *)camera animated:(BOOL)animated

    Parameters

    camera

    The camera object containing the viewing angle information. This parameter must not be nil.

    animated

    Specify YEStrue if you want the change in viewing angle to be animated or NOfalse if you want the map to reflect the changes without animations.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.

    See Also

    camera

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

    Declaration

    Swift

    var showsPointsOfInterest: Bool

    Objective-C

    @property(nonatomic) BOOL showsPointsOfInterest

    Discussion

    When this property is set to YEStrue, the map displays icons and labels for restaurants, schools, and other relevant points of interest. The default value of this property is YEStrue.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.

  • A Boolean indicating whether the map displays extruded building information.

    Declaration

    Swift

    var showsBuildings: Bool

    Objective-C

    @property(nonatomic) BOOL showsBuildings

    Discussion

    When this property is set to YEStrue and the camera has a pitch angle greater than zero, the map extrudes buildings so that they extend above the map plane, creating a 3D effect. The mapType property must be set to MKMapTypeStandard for extruded buildings to be displayed. The default value of this property is YEStrue.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.

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

    Declaration

    Swift

    var showsUserLocation: Bool

    Objective-C

    @property(nonatomic) BOOL showsUserLocation

    Discussion

    This property does not indicate whether the user’s position is actually visible on the map, only whether the map view should try to display it. Setting this property to YEStrue causes the map view to use the Core Location framework to find the current location and try to display it on the map. As long as this property is YEStrue, the map view continues to track the user’s location and update it periodically. The default value of this property is NOfalse.

    Showing the user’s location does not guarantee that the location is visible on the map. The user might have scrolled the map to a different point, causing the current location to be offscreen. To determine whether the user’s current location is currently displayed on the map, use the userLocationVisible property.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • A Boolean value indicating whether the device’s current location is visible in the map view. (read-only)

    Declaration

    Swift

    var userLocationVisible: Bool { get }

    Objective-C

    @property(nonatomic, readonly, getter=isUserLocationVisible) BOOL userLocationVisible

    Discussion

    This property tells you whether the icon used to represent the user’s current location is visible in the map view. When determining whether the current location is visible, this property factors in the horizontal accuracy of the location data. Specifically, if the rectangle represented by the user’s current location plus or minus minus the horizontal accuracy of that location intersects the map’s visible rectangle, this property contains the value YEStrue. If that location rectangle does not intersect the map’s visible rectangle, this property contains the value NOfalse.

    If the user’s location cannot be determined, this property contains the value NOfalse.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • The annotation object representing the user’s current location. (read-only)

    Declaration

    Swift

    var userLocation: MKUserLocation! { get }

    Objective-C

    @property(nonatomic, readonly) MKUserLocation *userLocation

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • The mode used to track the user location.

    Declaration

    Swift

    var userTrackingMode: MKUserTrackingMode

    Objective-C

    @property(nonatomic) MKUserTrackingMode userTrackingMode

    Discussion

    Possible values are described in MKUserTrackingMode.

    Setting the tracking mode to MKUserTrackingModeFollow or MKUserTrackingModeFollowWithHeading causes the map view to center the map on that location and begin tracking the user’s location. If the map is zoomed out, the map view automatically zooms in on the user’s location, effectively changing the current visible region.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 5.0 and later.

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

    Declaration

    Swift

    func setUserTrackingMode(_ mode: MKUserTrackingMode, animated animated: Bool)

    Objective-C

    - (void)setUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated

    Parameters

    mode

    The mode used to track the user location. Possible values are described in MKUserTrackingMode.

    animated

    If YEStrue, the change from the current mode to the new mode is animated; otherwise, it is not. This parameter affects only tracking mode changes. Changes to the user location or heading are always animated.

    Discussion

    Setting the tracking mode to MKUserTrackingModeFollow or MKUserTrackingModeFollowWithHeading causes the map view to center the map on that location and begin tracking the user’s location. If the map is zoomed out, the map view automatically zooms in on the user’s location, effectively changing the current visible region.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 5.0 and later.

  • The complete list of annotations associated with the receiver. (read-only)

    Declaration

    Swift

    var annotations: [AnyObject]! { get }

    Objective-C

    @property(nonatomic, readonly) NSArray *annotations

    Discussion

    The objects in this array must adopt the MKAnnotation protocol. If no annotations are associated with the map view, the value of this property is nil.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • Adds the specified annotation to the map view.

    Declaration

    Swift

    func addAnnotation(_ annotation: MKAnnotation!)

    Objective-C

    - (void)addAnnotation:(id<MKAnnotation>)annotation

    Parameters

    annotation

    The annotation object to add to the receiver. This object must conform to the MKAnnotation protocol. The map view retains the specified object.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • Adds an array of annotation objects to the map view.

    Declaration

    Swift

    func addAnnotations(_ annotations: [AnyObject]!)

    Objective-C

    - (void)addAnnotations:(NSArray *)annotations

    Parameters

    annotations

    An array of annotation objects. Each object in the array must conform to the MKAnnotation protocol. The map view retains the individual annotation objects.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • Removes the specified annotation object from the map view.

    Declaration

    Swift

    func removeAnnotation(_ annotation: MKAnnotation!)

    Objective-C

    - (void)removeAnnotation:(id<MKAnnotation>)annotation

    Parameters

    annotation

    The annotation object to remove. This object must conform to the MKAnnotation protocol.

    Discussion

    If the annotation is currently associated with an annotation view, and that view has a reuse identifier, this method removes the annotation view and queues it internally for later reuse. You can retrieve queued annotation views (and associate them with new annotations) using the dequeueReusableAnnotationViewWithIdentifier: method.

    Removing an annotation object disassociates it from the map view entirely, preventing it from being displayed on the map. Thus, you would typically call this method only when you want to hide or delete a given annotation.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • Removes an array of annotation objects from the map view.

    Declaration

    Swift

    func removeAnnotations(_ annotations: [AnyObject]!)

    Objective-C

    - (void)removeAnnotations:(NSArray *)annotations

    Parameters

    annotations

    The array of annotations to remove. Objects in the array must conform to the MKAnnotation protocol.

    Discussion

    If any annotation object in the array has an associated annotation view, and if that view has a reuse identifier, this method removes the annotation view and queues it internally for later reuse. You can retrieve queued annotation views (and associate them with new annotations) using the dequeueReusableAnnotationViewWithIdentifier: method.

    Removing annotation objects disassociates them from the map view entirely, preventing them from being displayed on the map. Thus, you would typically call this method only when you want to hide or delete the specified annotations.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

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

    Declaration

    Swift

    func viewForAnnotation(_ annotation: MKAnnotation!) -> MKAnnotationView!

    Objective-C

    - (MKAnnotationView *)viewForAnnotation:(id<MKAnnotation>)annotation

    Parameters

    annotation

    The annotation object whose view you want.

    Return Value

    The annotation view or nil if the view has not yet been created. This method may also return nil if the annotation is not in the visible map region and therefore does not have an associated annotation view.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • Returns the annotation objects located in the specified map rectangle.

    Declaration

    Swift

    func annotationsInMapRect(_ mapRect: MKMapRect) -> Set<NSObject>!

    Objective-C

    - (NSSet *)annotationsInMapRect:(MKMapRect)mapRect

    Parameters

    mapRect

    The portion of the map that you want to search for annotations.

    Return Value

    The set of annotation objects located in mapRect.

    Discussion

    This method offers a fast way to retrieve the annotation objects in a particular portion of the map. This method is much faster than doing a linear search of the objects in the annotations property yourself.

    Special Considerations

    Prior to iOS 7 this method incorrectly did not return instances of MKUserLocation.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.2 and later.

  • The visible rectangle where annotation views are currently being displayed. (read-only)

    Declaration

    Swift

    var annotationVisibleRect: CGRect { get }

    Objective-C

    @property(nonatomic, readonly) CGRect annotationVisibleRect

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • Returns a reusable annotation view located by its identifier.

    Declaration

    Swift

    func dequeueReusableAnnotationViewWithIdentifier(_ identifier: String!) -> MKAnnotationView!

    Objective-C

    - (MKAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier

    Parameters

    identifier

    A string identifying the annotation view to be reused. This string is the same one you specify when initializing the annotation view using the initWithAnnotation:reuseIdentifier: method.

    Return Value

    An annotation view with the specified identifier, or nil if no such object exists in the reuse queue.

    Discussion

    For performance reasons, you should generally reuse MKAnnotationView objects in your map views. As annotation views move offscreen, the map view moves them to an internally managed reuse queue. As new annotations move onscreen, and your code is prompted to provide a corresponding annotation view, you should always attempt to dequeue an existing view before creating a new one. Dequeueing saves time and memory during performance-critical operations such as scrolling.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • The annotations that are currently selected.

    Declaration

    Swift

    var selectedAnnotations: [AnyObject]!

    Objective-C

    @property(nonatomic, copy) NSArray *selectedAnnotations

    Discussion

    Assigning a new array to this property selects only the first annotation in the array.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

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

    Declaration

    Swift

    func selectAnnotation(_ annotation: MKAnnotation!, animated animated: Bool)

    Objective-C

    - (void)selectAnnotation:(id<MKAnnotation>)annotation animated:(BOOL)animated

    Parameters

    annotation

    The annotation object to select.

    animated

    If YEStrue, the callout view is animated into position.

    Discussion

    If the specified annotation is not onscreen, and therefore does not have an associated annotation view, this method has no effect.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • Deselects the specified annotation and hides its callout view.

    Declaration

    Swift

    func deselectAnnotation(_ annotation: MKAnnotation!, animated animated: Bool)

    Objective-C

    - (void)deselectAnnotation:(id<MKAnnotation>)annotation animated:(BOOL)animated

    Parameters

    annotation

    The annotation object to deselect.

    animated

    If YEStrue, the callout view is animated offscreen.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

  • overlays overlays Property

    The overlay objects currently associated with the map view. (read-only)

    Declaration

    Swift

    var overlays: [AnyObject]! { get }

    Objective-C

    @property(nonatomic, readonly) NSArray *overlays

    Discussion

    This property contains the union of all overlays at the different levels of the map. The objects in this array must adopt the MKOverlay protocol. If no overlays are associated with the map view, the value of this property is an empty array.

    The order of the objects in this array does not necessary reflect their visual order on the map.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

  • The overlay objects in the specified level of the map.

    Declaration

    Swift

    func overlaysInLevel(_ level: MKOverlayLevel) -> [AnyObject]!

    Objective-C

    - (NSArray *)overlaysInLevel:(MKOverlayLevel)level

    Parameters

    level

    The map level whose overlays you want. For a list of possible values for this parameter, see MKOverlayLevel.

    Return Value

    An array of objects conforming to the MKOverlay protocol that display in the specified map level. If there are no overlays at the specified level, this method returns an empty array.

    Discussion

    You can use this method to get all of the overlays assigned to a specific map level, which might be a subset of the complete set of overlay objects. For overlapping overlay objects, the order of objects in the array represents their visual order when displayed on the map, with objects in the beginning of the array located behind those at later indexes.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.

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

    Declaration

    Swift

    func rendererForOverlay(_ overlay: MKOverlay!) -> MKOverlayRenderer!

    Objective-C

    - (MKOverlayRenderer *)rendererForOverlay:(id<MKOverlay>)overlay

    Parameters

    overlay

    The overlay object whose renderer you want.

    Return Value

    The renderer object in use for the specified overlay or nil if the overlay is not onscreen.

    Discussion

    This method returns the renderer object that your map delegate provided in its mapView:rendererForOverlay: method.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.

  • Returns the view associated with the overlay object if any.

    Deprecation Statement

    Use the rendererForOverlay: method instead.

    Declaration

    Objective-C

    - (MKOverlayView *)viewForOverlay:(id<MKOverlay>)overlay

    Parameters

    overlay

    The overlay object whose view you want.

    Return Value

    The view associated with the overlay object or nil if the overlay is not onscreen.

    Import Statement

    Objective-C

    @import MapKit;

    Availability

    Available in iOS 4.0 and later.

    Deprecated in iOS 7.0.

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

    Declaration

    Swift

    func addOverlay(_ overlay: MKOverlay!, level level: MKOverlayLevel)

    Objective-C

    - (void)addOverlay:(id<MKOverlay>)overlay level:(MKOverlayLevel)level

    Parameters

    overlay

    The overlay object to add. This object must conform to the MKOverlay protocol.

    level

    The map level at which to place the overlay. For a list of possible values for this parameter, see MKOverlayLevel.

    Discussion

    Positioning an overlay at a specific level places that overlay’s visual representation in front of or behind other map content such as map labels and point-of-interest icons.

    This method adds the specified overlay to the end of the list of overlay objects at the given level. Adding an overlay also causes the map view to begin monitoring the area they represent. As soon as the bounding rectangle of the overlay intersects the visible portion of the map, the map view calls your delegate’s mapView:rendererForOverlay: method to get the renderer object to use when drawing the overlay.

    To remove an overlay from a map, use the removeOverlay: method.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.

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

    Declaration

    Swift

    func addOverlays(_ overlays: [AnyObject]!, level level: MKOverlayLevel)

    Objective-C

    - (void)addOverlays:(NSArray *)overlays level:(MKOverlayLevel)level

    Parameters

    overlays

    The array of overlay objects to add. Each object in the array must conform to the MKOverlay protocol.

    level

    The map level at which to place the overlays. For a list of possible values for this parameter, see MKOverlayLevel.

    Discussion

    Positioning an overlay at a specific level places that overlay’s visual representation in front of or behind other map content such as map labels and point-of-interest icons.

    This method adds the specified overlays to the end of the list of overlay objects at the given level. Adding the overlays also causes the map view to begin monitoring the area they represent. As soon as the bounding rectangle of an overlay intersects the visible portion of the map, the map view calls your delegate’s mapView:rendererForOverlay: method to get the renderer object to use when drawing that overlay.

    To remove multiple overlays from a map, use the removeOverlays: method.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.

  • Adds a single overlay object to the map.

    Declaration

    Swift

    func addOverlay(_ overlay: MKOverlay!)

    Objective-C

    - (void)addOverlay:(id<MKOverlay>)overlay

    Parameters

    overlay

    The overlay object to add. This object must conform to the MKOverlay protocol.

    Discussion

    The specified object is added to the group of overlay objects in the MKOverlayLevelAboveLabels level. Adding an overlay causes the map view to begin monitoring the area represented by that overlay. As soon as the bounding rectangle of an overlay intersects the visible portion of the map, the map view adds a corresponding overlay view to the map. The overlay view is provided by the mapView:viewForOverlay: method of the map view’s delegate object.

    To remove an overlay from a map, use the removeOverlay: method.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

  • Adds an array of overlay objects to the map.

    Declaration

    Swift

    func addOverlays(_ overlays: [AnyObject]!)

    Objective-C

    - (void)addOverlays:(NSArray *)overlays

    Parameters

    overlays

    An array of objects, each of which must conform to the MKOverlay protocol.

    Discussion

    The specified objects are added to the group of overlay objects in the MKOverlayLevelAboveLabels level. Adding an overlay causes the map view to begin monitoring the area represented by that overlay. As soon as the bounding rectangle of the overlay intersects the visible portion of the map, the map view tries to draw the overlay. As soon as the bounding rectangle of an overlay intersects the visible portion of the map, the map view adds a corresponding overlay view to the map. The overlay view is provided by the mapView:viewForOverlay: method of the map view’s delegate object.

    To remove multiple overlays from a map, use the removeOverlays: method.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

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

    Declaration

    Swift

    func insertOverlay(_ overlay: MKOverlay!, atIndex index: Int, level level: MKOverlayLevel)

    Objective-C

    - (void)insertOverlay:(id<MKOverlay>)overlay atIndex:(NSUInteger)index level:(MKOverlayLevel)level

    Parameters

    overlay

    The overlay object to insert.

    index

    The index at which to insert the overlay object. If this value is greater than the number of objects in the overlays property, this method appends the object to the end of the array.

    level

    The map level at which to place the overlay. For a list of possible values for this parameter, see MKOverlayLevel.

    Discussion

    Inserting an overlay at a specific level places that overlay’s visual representation in front of or behind other map content such as map labels and point-of-interest icons.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.

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

    Declaration

    Swift

    func insertOverlay(_ overlay: MKOverlay!, atIndex index: Int)

    Objective-C

    - (void)insertOverlay:(id<MKOverlay>)overlay atIndex:(NSUInteger)index

    Parameters

    overlay

    The overlay object to insert.

    index

    The index at which to insert the overlay object. If this value is greater than the number of objects in the overlays property, this method appends the object to the end of the array.

    Discussion

    This method inserts the overlay into the MKOverlayLevelAboveLabels level.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

  • Inserts one overlay object on top of another.

    Declaration

    Swift

    func insertOverlay(_ overlay: MKOverlay!, aboveOverlay sibling: MKOverlay!)

    Objective-C

    - (void)insertOverlay:(id<MKOverlay>)overlay aboveOverlay:(id<MKOverlay>)sibling

    Parameters

    overlay

    The overlay object to insert.

    sibling

    An existing object in the overlays array. This object must exist in the array and must not be nil.

    Discussion

    This method inserts the overlay into the MKOverlayLevelAboveLabels level and positions it relative to the specified sibling. When displayed, this leads to the overlay’s contents being displayed above that of its sibling. If sibling is not in the same map level, this method appends the overlay to the end of the list of overlays at the indicated level.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

  • Inserts one overlay object below another.

    Declaration

    Swift

    func insertOverlay(_ overlay: MKOverlay!, belowOverlay sibling: MKOverlay!)

    Objective-C

    - (void)insertOverlay:(id<MKOverlay>)overlay belowOverlay:(id<MKOverlay>)sibling

    Parameters

    overlay

    The overlay object to insert.

    sibling

    An existing object in the overlays array. This object must exist in the array and must not be nil.

    Discussion

    This method inserts the overlay into the MKOverlayLevelAboveLabels level and positions it relative to the specified sibling. When displayed, this leads to the overlay’s contents being displayed beneath that of its sibling. If sibling is not in the same map level, this method appends the overlay to the end of the list of overlays at the indicated level.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

  • Exchanges the positions of the two overlay objects.

    Declaration

    Swift

    func exchangeOverlay(_ overlay1: MKOverlay!, withOverlay overlay2: MKOverlay!)

    Objective-C

    - (void)exchangeOverlay:(id<MKOverlay>)overlay1 withOverlay:(id<MKOverlay>)overlay2

    Parameters

    overlay1

    The first overlay object.

    overlay2

    The second overlay object.

    Discussion

    If the overlays are in the same map level, they exchange positions within that level’s array of overlay objects. If they are in different map levels, the two objects also swap levels. Swapping the position of the overlays affects their visibility in the map view.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.

  • Exchanges the position of two overlay objects.

    Declaration

    Swift

    func exchangeOverlayAtIndex(_ index1: Int, withOverlayAtIndex index2: Int)

    Objective-C

    - (void)exchangeOverlayAtIndex:(NSUInteger)index1 withOverlayAtIndex:(NSUInteger)index2

    Parameters

    index1

    The index of an overlay in the MKOverlayLevelAboveLabels map level.

    index2

    The index of another overlay in the MKOverlayLevelAboveLabels map level.

    Discussion

    If you need to exchange overlays in other map levels, use the exchangeOverlay:withOverlay: method.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

  • Removes a single overlay object from the map.

    Declaration

    Swift

    func removeOverlay(_ overlay: MKOverlay!)

    Objective-C

    - (void)removeOverlay:(id<MKOverlay>)overlay

    Parameters

    overlay

    The overlay object to remove.

    Discussion

    This method removes the overlay regardless of the level that it is in. Removing an overlay also removes its corresponding renderer, if one is in use. If the specified overlay is not currently associated with the map view, this method does nothing.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

  • Removes one or more overlay objects from the map.

    Declaration

    Swift

    func removeOverlays(_ overlays: [AnyObject]!)

    Objective-C

    - (void)removeOverlays:(NSArray *)overlays

    Parameters

    overlays

    An array of objects, each of which conforms to the MKOverlay protocol.

    Discussion

    This method removes the specified overlays regardless of which level each one is in. Removing an overlay also removes its corresponding renderer, if one is in use. If a given overlay object is not associated with the map view, it is ignored.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

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

    Declaration

    Swift

    func convertCoordinate(_ coordinate: CLLocationCoordinate2D, toPointToView view: UIView!) -> CGPoint

    Objective-C

    - (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(UIView *)view

    Parameters

    coordinate

    The map coordinate for which you want to find the corresponding point.

    view

    The view in whose coordinate system you want to locate the specified map coordinate. If this parameter is nil, the returned point is specified in the window’s coordinate system. If view is not nil, it must belong to the same window as the map view.

    Return Value

    The point (in the appropriate view or window coordinate system) corresponding to the specified latitude and longitude value.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

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

    Declaration

    Swift

    func convertPoint(_ point: CGPoint, toCoordinateFromView view: UIView!) -> CLLocationCoordinate2D

    Objective-C

    - (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view

    Parameters

    point

    The point you want to convert.

    view

    The view that serves as the reference coordinate system for the point parameter.

    Return Value

    The map coordinate at the specified point.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

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

    Declaration

    Swift

    func convertRegion(_ region: MKCoordinateRegion, toRectToView view: UIView!) -> CGRect

    Objective-C

    - (CGRect)convertRegion:(MKCoordinateRegion)region toRectToView:(UIView *)view

    Parameters

    region

    The map region for which you want to find the corresponding view rectangle.

    view

    The view in whose coordinate system you want to locate the specified map region. If this parameter is nil, the returned rectangle is specified in the window’s coordinate system. If view is not nil, it must belong to the same window as the map view.

    Return Value

    The rectangle corresponding to the specified map region.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

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

    Declaration

    Swift

    func convertRect(_ rect: CGRect, toRegionFromView view: UIView!) -> MKCoordinateRegion

    Objective-C

    - (MKCoordinateRegion)convertRect:(CGRect)rect toRegionFromView:(UIView *)view

    Parameters

    rect

    The rectangle you want to convert.

    view

    The view that serves as the reference coordinate system for the rect parameter.

    Return Value

    The map region corresponding to the specified view rectangle.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

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

    Declaration

    Swift

    func regionThatFits(_ region: MKCoordinateRegion) -> MKCoordinateRegion

    Objective-C

    - (MKCoordinateRegion)regionThatFits:(MKCoordinateRegion)region

    Parameters

    region

    The initial region whose span you want to adjust.

    Return Value

    A region that is still centered on the same point of the map but whose span values are adjusted to fit in the map view’s frame.

    Discussion

    You can use this method to normalize the region values before displaying them in the map. This method returns a new region that both contains the specified region and fits neatly inside the map view’s frame.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

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

    Declaration

    Swift

    func mapRectThatFits(_ mapRect: MKMapRect) -> MKMapRect

    Objective-C

    - (MKMapRect)mapRectThatFits:(MKMapRect)mapRect

    Parameters

    mapRect

    The initial map rectangle whose width and height you want to adjust.

    Return Value

    A map rectangle that is still centered on the same point of the map but whose width and height are adjusted to fit in the map view’s frame.

    Discussion

    You can use this method to normalize map rectangle values before displaying the corresponding area. This method returns a new map rectangle that both contains the specified rectangle and fits neatly inside the map view’s frame.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

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

    Declaration

    Swift

    func mapRectThatFits(_ mapRect: MKMapRect, edgePadding insets: UIEdgeInsets) -> MKMapRect

    Objective-C

    - (MKMapRect)mapRectThatFits:(MKMapRect)mapRect edgePadding:(UIEdgeInsets)insets

    Parameters

    mapRect

    The initial map rectangle whose width and height you want to adjust.

    insets

    The distance (measured in screen points) by which to inset the returned rectangle from the actual boundaries of the map view’s frame.

    Return Value

    A map rectangle that is still centered on the same point of the map but whose width and height are adjusted to fit in the map view’s frame minus the inset values.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 4.0 and later.

  • The type of map to display.

    Declaration

    Swift

    enum MKMapType : UInt { case Standard case Satellite case Hybrid }

    Objective-C

    typedef enum : NSUInteger { MKMapTypeStandard, MKMapTypeSatellite, MKMapTypeHybrid } MKMapType;

    Constants

    • Standard

      MKMapTypeStandard

      Displays a street map that shows the position of all roads and some road names.

      Available in iOS 3.0 and later.

    • Satellite

      MKMapTypeSatellite

      Displays satellite imagery of the area.

      Available in iOS 3.0 and later.

    • Hybrid

      MKMapTypeHybrid

      Displays a satellite image of the area with road and road name information layered on top.

      Available in iOS 3.0 and later.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 3.0 and later.

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

    Declaration

    Swift

    enum MKUserTrackingMode : Int { case None case Follow case FollowWithHeading }

    Objective-C

    typedef enum : NSInteger { MKUserTrackingModeNone = 0, MKUserTrackingModeFollow, MKUserTrackingModeFollowWithHeading, } MKUserTrackingMode;

    Constants

    • None

      MKUserTrackingModeNone

      The map does not follow the user location.

      Available in iOS 5.0 and later.

    • Follow

      MKUserTrackingModeFollow

      The map follows the user location.

      Available in iOS 5.0 and later.

    • FollowWithHeading

      MKUserTrackingModeFollowWithHeading

      The map follows the user location and rotates when the heading changes.

      Available in iOS 5.0 and later.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 5.0 and later.

  • Constants indicating the position of overlays relative to other content.

    Declaration

    Swift

    enum MKOverlayLevel : Int { case AboveRoads case AboveLabels }

    Objective-C

    typedef enum : NSInteger { MKOverlayLevelAboveRoads = 0, MKOverlayLevelAboveLabels } MKOverlayLevel;

    Constants

    • AboveRoads

      MKOverlayLevelAboveRoads

      Place the overlay above roadways but below map labels, shields, or point-of-interest icons.

      Available in iOS 7.0 and later.

    • AboveLabels

      MKOverlayLevelAboveLabels

      Place the overlay above map labels, shields, or point-of-interest icons but below annotations and 3D projections of buildings.

      Available in iOS 7.0 and later.

    Import Statement

    Objective-C

    @import MapKit;

    Swift

    import MapKit

    Availability

    Available in iOS 7.0 and later.