2017-06-29 56 views
0

我想動畫在這樣一個地圖視圖的座標的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

回答

1

只要用戶與地圖(縮放,滾動)相互作用,你可以/應該停止動畫

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