如何动画的MKPointAnnotation的坐标变换正确

问题描述:

我想动画在这样一个地图视图的坐标的MKPointAnnotation的变化:如何动画的MKPointAnnotation的坐标变换正确

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

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

我加了引脚映射这样的:

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

myAnnotation.coordinate = startPosition 

mapView.addAnnotation(myAnnotation) 

myAnnotation在我的ViewController宣布这样一个全局变量:

private let myAnnotation = MKPointAnnotation() 

但是当我在动画过程中缩放地图时(方法是调用MKMapViewDelegate的regionDidChangeAnimated方法),引脚的位置移动到地图上的错误位置,而不是在缩放过程中移动到正确的地图坐标。

我在这里上传了一个Screencast,很好的描述了这个问题。

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

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

+0

你能否提供一些更多的细节意味着你正在做的更多的代码? – Dido

+0

是的,谢谢Dido。我编辑我的问题,并试图提供更多信息 – alf1990

只要用户与地图(缩放,滚动)相互作用,你可以/应该停止动画

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 
    } 
}) 
+0

非常感谢。这是我正在寻找的解决方案:)。 – alf1990