This method works well (Swift), and you can customize the button:
class YourViewController{ ... @IBOutlet weak var mapView:MKMapView ... override func viewDidLoad() { super.viewDidLoad() ... addMapTrackingButton() } func addMapTrackingButton(){ let image = UIImage(named: "trackme") as UIImage? let button = UIButton(type: UIButtonType.System) as UIButton button.frame = CGRectMake(5, 5, 35, 35) button.setImage(image, forState: .Normal) button.backgroundColor = .clearColor() button.addTarget(self, action: #selector(YourViewController.centerMapOnUserButtonClicked), forControlEvents:.TouchUpInside) self.mapView.addSubview(button) } func centerMapOnUserButtonClicked() { self.mapView.setUserTrackingMode( MKUserTrackingMode.Follow, animated: true) } ... }
Swift 4:
func addMapTrackingButton(){ let image = UIImage(named: "trackme") as UIImage? let button = UIButton(type: UIButtonType.custom) as UIButton button.frame = CGRect(origin: CGPoint(x:5, y: 25), size: CGSize(width: 35, height: 35)) button.setImage(image, for: .normal) button.backgroundColor = .clear button.addTarget(self, action: #selector(ViewController.centerMapOnUserButtonClicked), for:.touchUpInside) mapView.addSubview(button) } @objc func centerMapOnUserButtonClicked() { mapView.setUserTrackingMode(MKUserTrackingMode.follow, animated: true) }
source share