2012-07-11 92 views
8

我在AnnotationView圖層上添加一個CABasicAnimation以模擬在地圖視圖中移動的汽車。縮放地圖視圖時動畫AnnotationView消失?

這工作正常,直到我嘗試放大或縮小動畫進行時的地圖視圖。

我發現縮放mapview時動畫註解視圖消失!

我想這可能是由於縮放mapview時關聯動畫對象的圖層已被刪除。

我嘗試通過在縮放時停止動畫來解決此問題。但結果並不好。這輛車似乎跳到了目標點。

任何人都有這個想法?

任何人都知道如何在縮放mapview時使動畫仍然運行?

+0

你做對這個問題有何進展?我遇到了同樣的問題,並希望解決它。 – 2012-07-16 18:21:15

+0

@Hubert你可以發佈移動註釋的代碼嗎? – Mubbashar 2014-07-17 12:27:39

回答

1

我不知道如何以編程方式解決您的問題,但如果在用戶開始縮放時存儲汽車位置(點a),當縮放完成時,計算當前位置與新位置(點b),然後從點a到點b進行動畫處理。這樣汽車就不會縫到「跳」到第二個目標點。爲了讓它更有趣,以接近「B」點的速度以正常速度的兩倍速度開始車速,然後減速至正常速度。我認爲這會使它看起來不像一個bug,更像是一種效果。

+0

好主意,但我真的需要一個工作代碼的答案。我甚至不知道如何檢測用戶放大MKMapView的時間。 – Felix 2012-07-24 15:18:28

0

我想,你可以使用mapView:regionDidChangeAnimated:委託方法。任何時候用戶滾動/放大,這個方法都會被調用。只是嘗試一次。它可以幫助你。

1

我解決它通過終止對regionWillChangeAnimated所有註釋動畫: -

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated 
{ 

    for (int i=0;i< [mapView.annotations count];i++) 
    { 
    id annotation = [mapView.annotations objectAtIndex:i]; 

    MKAnnotationView* annView =[mapView viewForAnnotation: annotation]; 
    if (annView != nil) 
    { 

     CALayer* layer = annView.layer; 
     [layer removeAllAnimations]; 
    } 

    } 
}