gpt4 book ai didi

ios - 如何正确地为 MKPointAnnotation 的坐标变化设置动画

转载 作者:可可西里 更新时间:2023-11-01 01:18:57 25 4
gpt4 key购买 nike

我想像这样在 map View 上为 MKPointAnnotation 的坐标变化设置动画:

let destinationLocation = CLLocationCoordinate2D(latitude: 51.873983, longitude: 12.627966)  

UIView.animate(withDuration: 20, animations: {
self.myAnnotation.coordinate = destinationLocation
}, completion: nil)

我像这样在 map 上添加了图钉:

let startPosition = CLLocationCoordinate2D(latitude: 53.014542, longitude: 13.996593)

myAnnotation.coordinate = startPosition

mapView.addAnnotation(myAnnotation)

myAnnotation 是在我的 ViewController 中这样声明的全局变量:

private let myAnnotation = MKPointAnnotation()

但是当我在动画期间缩放 map 时(调用 MKMapViewDelegate 的方法 regionDidChangeAnimated),图钉的位置移动到 map 上的错误位置,而不是在缩放期间移动到正确的 map 坐标。

我在这里上传了一个截屏视频,它很好地描述了这个问题。

https://wetransfer.com/downloads/46a0ea2bdc0703ac392581532d3713f920170630095741/7f6499e7a38737a1f04740cd933ddaee20170630095741/dd2b2d

我不知道提供短视频的另一种可能性。大小只有 8 MB。这是查看问题的最佳方式。

最佳答案

每当用户与 map 交互(缩放、滚动)时,您可以/应该停止动画

if let annotationView = self.mapView.view(for: self.myAnnotation) {
annotationView.layer.removeAllAnimations()
}

此外,您可以实现动画的完成处理程序,以正确处理取消/成功的动画:

UIView.animate(withDuration: 20, animations: {
self.myAnnotation.coordinate = destinationLocation
}, completion: { success in
if success {
// handle a successfully ended animation
} else {
// handle a canceled animation, i.e move to destination immediately
self.myAnnotation.coordinate = destinationLocation
}
})

关于ios - 如何正确地为 MKPointAnnotation 的坐标变化设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44819389/

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