2013-03-27 165 views
23

適用於iOS的谷歌地圖的文檔控制動畫時長指出:在谷歌地圖iOS版

呼叫的幾種方法,讓您動畫攝像機移動到新位置的一個。您可以使用CoreAnimation控制動畫的持續時間。

對於我的生活,我無法弄清楚如何控制動畫持續時間。我一直在使用的UIView動畫,喜歡嘗試:

[UIView animateWithDuration: 5 animations:^{ 
     GMSCameraPosition *camera = [self newCamera]; 
     self.mapView.camera = camera; 
    } completion:^(BOOL finished) { 
    }]; 

而且我看了看CoreAnimation CALayer的動畫。但是,我不知道如何將圖層動畫應用於地圖視圖。

有人可以指點我正確的方向嗎?

回答

38

我找到了答案...你可以通過包裝動畫的一個控制動畫時間*在CATransaction方法,像這樣:

[CATransaction begin]; 
    [CATransaction setValue:[NSNumber numberWithFloat: 1.0f] forKey:kCATransactionAnimationDuration]; 
    // change the camera, set the zoom, whatever. Just make sure to call the animate* method. 
    [self.mapView animateToCameraPosition: [self newCamera]]; 
    [CATransaction commit]; 
+1

需要:---)謝謝。 – user1007522 2014-08-19 12:22:00

2

什麼貝蒂,使用你只要同樣的方法無法知道動畫是否已結束。

是的我知道,有一個CATransaction完成塊使用這種方法,但它根本不工作! :(

[CATransaction begin]; 
[CATransaction setValue:[NSNumber numberWithFloat: 1.0f] forKey:kCATransactionAnimationDuration]; 

[CATransaction setCompletionBlock:^{ 
// ... whatever you want to do when the animation is complete 
}]; 

[self.googleMapsView animateToCameraPosition:[GMSCameraPosition 
        cameraWithLatitude:LATITUDE 
          longitude:LONGITUDE 
            zoom:ZOOM]]; 

[CATransaction commit]; 

我不能使用的MapView:didIdle黑客知道動畫已經結束因爲如果沒有攝像頭位置的變化也不會被稱爲

有誰知道?如何檢測animateon已經結束事件

發現了一個線程關心這個(解決): CATransaction completion being called immediately

5

雨燕2.0

CATransaction.begin() 
CATransaction.setValue(NSNumber(float: 1.0), forKey: kCATransactionAnimationDuration) 
// change the camera, set the zoom, whatever. Just make sure to call the animate* method. 
CATransaction.commit() 
+0

這很好用 - 謝謝! – 2016-04-21 02:35:58

9

爲夫特3.0:

CATransaction.begin() 
CATransaction.setValue(1.5, forKey: kCATransactionAnimationDuration) 
// your camera code goes here, example: 
// mapView.animate(with: update) 
CATransaction.commit() 

該值(1.5在這種情況下)越大,越慢的動畫。