28

iOS 用 Google マップのドキュメントには、次のように記載されています。

新しい位置に移動するカメラをアニメーション化できるいくつかのメソッドのいずれかを呼び出します。アニメーションの長さは CoreAnimation で制御できます。

私の人生では、アニメーションの長さを制御する方法がわかりません。次のような UIView アニメーションを使用してみました。

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

そして、CoreAnimation で CALayer アニメーションを見てきました。ただし、マップ ビューにレイヤー アニメーションを適用する方法がわかりません。

誰かが私を正しい方向に向けることができますか?

4

4 に答える 4

41

答えが見つかりました...次のように、animate* メソッドの 1 つを 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];
于 2013-03-27T15:43:36.060 に答える
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ハックを使用してアニメーションが終了したことを知ることできません。これは、カメラの位置が変化しないと呼び出されないためです。

アニメーションが終了したイベントを検出する方法を知っている人はいますか?

これについてのスレッドが見つかりました(解決済み): CATransaction の完了がすぐに呼び出されます

于 2015-10-31T15:34:08.127 に答える