Как установить состояние кнопки отслеживания пользователей Mapkit

Я создал карту с кнопкой отслеживания пользователей в правом верхнем углу. Мне было интересно, как я смогу установить состояние "followWithHeadlights" по умолчанию при загрузке, чтобы оно следовало за текущим положением пользователей так же, как вы бы это делали по GPS?

Текущее поведение при нагрузке: текущее поведение кнопки

Желаемое поведение при нагрузке: кнопка желаемого поведения

Фрагмент кода:

func setUserTrackingButton() {

    // Mapkit tracking button
    let trackingButton: MKUserTrackingBarButtonItem = MKUserTrackingBarButtonItem.init(mapView: mapView)
    trackingButton.customView?.tintColor = UIColor(red:0.01, green:0.81, blue:0.37, alpha:1.0)
    trackingButton.customView?.frame.size = CGSize(width: 50, height: 50)

    let toolBarFrame = CGRect(origin: CGPoint(x: 0, y: 0) , size: CGSize(width: 50, height: 50))
    let toolbar = UIToolbar.init(frame: toolBarFrame)
    toolbar.barTintColor = UIColor.white
    toolbar.isTranslucent = true
    let flex: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
    toolbar.items = [flex, trackingButton, flex]

    let origin = CGPoint(x: self.view.frame.size.width - 85, y: 60)
    let roundedSquare: UIView = UIView(frame: CGRect(origin: origin, size: CGSize(width: 50, height: 50)))
    roundedSquare.backgroundColor = UIColor.white
    roundedSquare.layer.cornerRadius = 5
    roundedSquare.layer.masksToBounds = true

    roundedSquare.addSubview(toolbar)
    mapView.addSubview(roundedSquare)
}

ViewDidLoad включает в себя:

mapView.setUserTrackingMode(MKUserTrackingMode.followWithHeading, animated: true)

Спасибо!

1 ответ

Решение

Режим отслеживания пользователя должен быть установлен после полной загрузки вида карты. В viewDidLoad это не вариант.

Вы можете использовать MKMapViewDelegate метод mapViewDidFinishLoading(mapView:) чтобы узнать, когда карта загрузилась:

class MyMapViewController: UIViewController, MKMapViewDelegate {

    // ...

    override func viewDidLoad() {        
        super.viewDidLoad()

        // ...
        mapView.delegate = self
    }

    // ...

    func mapViewDidFinishLoadingMap(_ mapView: MKMapView) {
        mapView.setUserTrackingMode(.followWithHeading, animated: true)
    }

    // ...

}
Другие вопросы по тегам