1

私がやろうとしている続編のアニメーションがあります。2つのステップがあります。

ステップ1:レイヤーを取得し、視点を少し変更して、レイヤーの上部が後ろに移動しているように見せます。sourceViewController.view.layer.transform CATransform3DMakePerspective(0, 0.003, CATransform3DIdentity);

ステップ2:スケールを80%に変更し、パースペクティブを通常に戻します。これにより、わずかなスイングズームアウトアニメーションのようになります。

sourceViewController.view.layer.transform = CATransform3DScale(sourceViewController.view.layer.transform, 0.8, 0.8, 1);

sourceViewController.view.layer.transform CATransform3DMakePerspective(0, 0, sourceViewController.view.layer.transform);

私の最大の問題はこれです。レイヤーで同時に2つのアニメーションを実行することはできません。両方を同時に実行するのではなく、最初の変換の最後に自動的に開始します。これはconcatで修正できますが、ステップ1のトップを実行したいので、レイヤーはその状態を保存してステップ2を実行できるようにするため、3つすべてを連結することはできません。

同じレイヤーに1つ以上の変換があるマルチステップアニメーションを作成するにはどうすればよいですか?以下の例で述べたように、ステップ1をスキップして、ステップがすでに完了したかのように開始します。説明するのがやや紛らわしいことは知っています。これが私のアニメーションです。

[UIView animateWithDuration:2.0
                        遅延:0.0
                        オプション:UIViewAnimationCurveEaseIn
                     アニメーション:^ {
                         sourceViewController.view.layer.transform = CATransform3DMakePerspective(0、0.003、sourceViewController.view.layer.transform);
                         [UIView animateWithDuration:1.0
                                               遅延:1.0
                                             オプション:UIViewAnimationCurveEaseOut
                                          アニメーション:^ {
                                              sourceViewController.view.layer.transform = CATransform3DConcat(CATransform3DScale(sourceViewController.view.layer.transform、0.8、0.8、1)、CATransform3DMakePerspective(0、0、sourceViewController.view.layer.transform));

                                          }
                                          完了:nil];
                     }
                     完了:^(BOOL終了){
                     }];

私はグーグルですべてを試しました。最後のエルフが離れた場所から始まる同じレイヤーで連続したアニメーションを実行する方法が必要です。IDがレイヤーが変換された場所ではなく開始状態に戻ることを読んだため、CATransform3DIdentityの代わりにレイヤーを渡します。

4

2 に答える 2

2

最初のアニメーションが完了するまで、2 番目のアニメーションを開始したくありません。それが完了ブロックの目的です。

[UIView animateWithDuration:2 delay:0 options:UIViewAnimationCurveEaseIn animations:^{
    sourceViewController.view.layer.transform = CATransform3DMakePerspective(
        0, 0.003, sourceViewController.view.layer.transform);
} completion:^(BOOL finished) {
    [UIView animateWithDuration:1 delay:0 options:UIViewAnimationCurveEaseOut animations:^{
        sourceViewController.view.layer.transform = CATransform3DConcat(
            CATransform3DScale(sourceViewController.view.layer.transform, 0.8, 0.8, 1),
            CATransform3DMakePerspective(0, 0, sourceViewController.view.layer.transform));
    } completion:nil];
}];
于 2012-10-06T18:20:37.913 に答える
0

最初の完了ハンドラーで 2 番目のアニメーションをネストする必要があります

[UIView animateWithDuration:2.0
                        delay:0.0
                      options:UIViewAnimationCurveEaseIn 
                   animations:^{
                         sourceViewController.view.layer.transform = CATransform3DMakePerspective(0, 0.003, sourceViewController.view.layer.transform);
                     } 
                     completion:^(BOOL finished){
                                        [UIView animateWithDuration:1.0
                                                              delay:0.0
                                                            options:UIViewAnimationCurveEaseOut 
                                                         animations:^{
                                                               sourceViewController.view.layer.transform = CATransform3DConcat(CATransform3DScale(sourceViewController.view.layer.transform, 0.8, 0.8, 1),CATransform3DMakePerspective(0, 0, sourceViewController.view.layer.transform));
                                          } 
                                          completion:nil];
                     }];
于 2012-10-06T18:21:30.897 に答える