gpt4 book ai didi

MKUserLocation 点的 iOS 10 标题箭头

转载 作者:IT王子 更新时间:2023-10-29 08:15:21 26 4
gpt4 key购买 nike

iOS 10 中的 map 应用现在在 MKUserLocation MKAnnotationView 顶部包含一个前进方向箭头。有什么方法可以将它添加到我自己的应用程序中的 MKMapView 吗?

enter image description here

编辑:我很乐意手动执行此操作,但我不确定是否可行?我可以向 map 添加注释并让它跟随用户的位置,包括动画移动吗?

最佳答案

我也遇到了同样的问题(需要一个方向指示器而不需要 map 旋转,类似于 Apple map 应用程序)。不幸的是,Apple 尚未提供“标题的蓝色图标”API。

我根据 @alku83 的实现创建了以下解决方案。

  1. 确保类符合 MKViewDelegate
  2. 添加委托(delegate)方法以将蓝色箭头图标添加到 map 位置点

    func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
    if views.last?.annotation is MKUserLocation {
    addHeadingView(toAnnotationView: views.last!)
    }
    }
  3. 添加创建“蓝色箭头图标”的方法。

    func addHeadingView(toAnnotationView annotationView: MKAnnotationView) {
    if headingImageView == nil {
    let image = #YOUR BLUE ARROW ICON#
    headingImageView = UIImageView(image: image)
    headingImageView!.frame = CGRect(x: (annotationView.frame.size.width - image.size.width)/2, y: (annotationView.frame.size.height - image.size.height)/2, width: image.size.width, height: image.size.height)
    annotationView.insertSubview(headingImageView!, at: 0)
    headingImageView!.isHidden = true
    }
    }
  4. var headingImageView: UIImageView? 添加到您的类(class)。这主要用于变换/旋转蓝色箭头图像。

  5. (在不同的类/对象中,具体取决于您的体系结构)创建一个位置管理器实例,该类符合 CLLocationManagerDelegate 协议(protocol)

    lazy var locationManager: CLLocationManager = {
    let manager = CLLocationManager()
    // Set up your manager properties here
    manager.delegate = self
    return manager
    }()
  6. 确保您的位置管理器正在跟踪用户航向数据 locationManager.startUpdatingHeading() 并在适当的时候停止跟踪 locationManager.stopUpdatingHeading()

  7. 添加 var userHeading: CLLocationDirection? 将保存方向值

  8. 添加标题值更改时通知的委托(delegate)方法,并适当更改 userHeading 值

    func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
    if newHeading.headingAccuracy < 0 { return }

    let heading = newHeading.trueHeading > 0 ? newHeading.trueHeading : newHeading.magneticHeading
    userHeading = heading
    NotificationCenter.default.post(name: Notification.Name(rawValue: #YOUR KEY#), object: self, userInfo: nil)
    }
  9. 现在在符合 MKMapViewDelegate 的类中,添加“转换”标题图像方向的方法

       func updateHeadingRotation() {
    if let heading = # YOUR locationManager instance#,
    let headingImageView = headingImageView {

    headingImageView.isHidden = false
    let rotation = CGFloat(heading/180 * Double.pi)
    headingImageView.transform = CGAffineTransform(rotationAngle: rotation)
    }
    }

关于MKUserLocation 点的 iOS 10 标题箭头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39762732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com