如何在MKMapView上禁止旋转但显示方向?

4

对于我的项目,我希望在MKMapView上显示用户的方向指示,但不旋转地图(使用蓝色圆锥体)。

enter image description here

这里有一个要点

此外,启用mapView.setUserTrackingMode(MKUserTrackingMode.FollowWithHeading, animated: true)后,我无法在地图上导航。

我尝试在mapView:didChangeUserTrackingMode中设置trackingMode,但它不起作用。

有什么想法吗?

1个回答

0

我曾经遇到过同样的问题,后来通过使用 CLLocationManagerlocationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) 方法解决了它:

class MyViewController: UIViewController {

    @IBOutlet weak var mapView: MKMapView!
    weak var userAnnotationView: MKAnnotationView?
    var locationManager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()
        mapView.showsUserLocation = true
        mapView.delegate = self
        locationManager.delegate = self
        locationManager.startUpdatingHeading()
    }
}

// MARK: - MKMapViewDelegate
extension MyViewController: MKMapViewDelegate {
    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        if let annotation = annotation as? MKUserLocation {
            // User
            let reuseIdentifier = "UserAnnotationView"
            let annotationView: MKAnnotationView
            if let view = mapView.dequeueReusableAnnotationView(withIdentifier: reuseIdentifier) {
                annotationView = view
            } else {
                annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier)
            }
            annotationView.image = UIImage(named: "userLocationWithoutHeading")
            userAnnotationView = annotationView
            return annotationView
        } else {
            return nil
        }
    }
}

// MARK: - CLLocationManagerDelegate
extension MyViewController: CLLocationManagerDelegate {
    func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
        guard let userAnnotationView = userAnnotationView else { return }
        userAnnotationView.image = UIImage(named: "arrowUp")
        let rotationAngle = heading.magneticHeading * Double.pi / 180.0
        userAnnotationView.transform = CGAffineTransform(rotationAngle: CGFloat(rotationAngle))
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接