gpt4 book ai didi

ios - 动画 MKMapView 相机航向转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:16 25 4
gpt4 key购买 nike

我想实现的是当userTrackingMode为followWithHeading时mapView中的动画( map 如何旋转)。

问题是我不能在这里使用这种跟踪模式,因为我们根据不同的位置信息绘制我们自己的蓝点,而不是 iOS 提供的。每次更新航向时,我都想设置 mapView 的摄像机航向值,但设置动画以使其平滑。

目前我尝试过:

  1. setCamera: animated: 当标题频繁变化时,这不太适用。
  2. animateWithDuration:animations:completion: 这根本不起作用。
  3. 我像下面的代码一样尝试了 CADisplayLink,但转换仍然不顺利。

CADisplayLink *timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateHeading)];
timer.frameInterval = 5;
[定时器 addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[定时器 addToRunLoop:[NSRunLoop mainRunLoop] forMode:UITrackingRunLoopMode];

updateHeading 方法中,我只是将 mapView 的相机设置为当前航向 self.camera.heading = newHeading.trueHeading;

我猜这是行不通的,因为我只是在这里每 5/60 秒设置一次相机,它没有动画。

有人可以指出实现此目标的正确方法吗?任何想法都将不胜感激。

最佳答案

我在使用 CADisplayLink 时运气不错,如果您移动较大的量(例如 170 度),速度会慢一些,但总的来说它运行平稳。我打算考虑向它添加缓动函数,但目前这是我见过的最流畅的路线。

private var headingDisplayLink: CADisplayLink?
private var desiredHeading: Double = 0

func locationManager(didUpdateHeading newHeading: CLHeading) {
self.updateHeading(to: newHeading.trueHeading)
}

private func updateHeading(to heading: Double) {
self.desiredHeading = heading.rounded()

if self.headingDisplayLink == nil {
self.headingDisplayLink = CADisplayLink(target: self, selector: #selector(self.headingDisplayLinkUpdate(link:)))
self.headingDisplayLinkUpdate(link: self.headingDisplayLink!)
self.headingDisplayLink?.add(to: RunLoop.main, forMode: .defaultRunLoopMode)
}
}

@objc private func headingDisplayLinkUpdate(link: CADisplayLink) {
if let camera = self.mapView?.camera.copy() as? MKMapCamera {
var delta: Double = self.desiredHeading > camera.heading ? 1 : -1
let difference = fabs(camera.heading - self.desiredHeading)
if difference > 180 {
delta *= -1
}

camera.heading += delta
self.mapView?.setCamera(camera, animated: false)

if camera.heading.rounded() == self.desiredHeading {
self.headingDisplayLink?.invalidate()
self.headingDisplayLink = nil
}
}
}

关于ios - 动画 MKMapView 相机航向转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44316017/

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