Chapter 15. Maps and Location

In this chapter, we will have a look at some awesome updates to the MapKit and Core Location frameworks.

15.1 Customizing the Map View with System Buttons

Problem

Instead of letting your map view display the compass or user tracking buttons (as it does by default), you want to place these buttons somewhere else in your application’s UI.

Solution

Follow these steps:

  1. For the user tracking button, create an instance of MKUserTrackingButton that inherits from UIView. You can then add this view to another view in your view hierarchy. Alternatively you can create an instance of UIBarButtonItem using its UIBarButtonItem(customView:) method, which lets you place the bar button on a navigation item. In the Discussion, we’ll show an example that uses a UIBarButtonItem.
  2. For the compass button, create an instance of the MKCompassButton class that also inherits from the UIView class. To display it, you have the same options as for the user tracking button.
  3. Set the mapType property of your map view to mutedStandard, of type MKMapType, so that the map view itself does not show the standard buttons and views.
  4. Set the value of the showsCompass property of your map view to false, so that the map view does not show its own compass button.

The resulting map view and navigation bar are shown in Figure 15-1.

Figure 15-1. Map with compass and user tracking buttons ...

Get iOS 11 Swift Programming Cookbook now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.