0

バウンス効果のある単純な水平フリップアニメーションを実行しようとしています。

    [UIView animateWithDuration:0.4 delay:0 options:UIViewAnimationCurveEaseIn animations:^{
    front.layer.transform=CATransform3DMakeRotation(DEGREES_TO_RADIANS(90), -1.0,0.0,0.0); // flip halfway
}
completion:^(BOOL finished) { // swap view
    front.alpha=0;
    back.alpha=1;
    [UIView animateWithDuration:0.5 animations:^{ // flip remaining + bounce
        back.layer.transform = CATransform3DMakeRotation(DEGREES_TO_RADIANS(45), 1.0,0.0,0.0); // final + 45 
    }
    completion:^(BOOL finished) {
        [UIView animateWithDuration:0.25 animations:^{
            back.layer.transform = CATransform3DMakeRotation(DEGREES_TO_RADIANS(-22.5), 1.0,0.0,0.0); // bounce back
        }
        completion:^(BOOL finished) {
            [UIView animateWithDuration:0.125 animations:^{
                back.layer.transform = CATransform3DMakeRotation(0, 1.0,0.0,0.0); // final
            }];
        }];
    }];
}];

'バウンス'を除いてうまく機能します。-22.5回転は、-22.5に進む代わりに、0に遷移し、22.5に戻ります。

私はさまざまな値を試しましたが、負になる前にバウンスを「0」に遷移させる中間のネストされたブロックも含めました。助けにはならなかった。回転は常に負の角度ではなく正の角度にアニメートされます。

ただし、テストと同様に、「final + 45」を負の角度に変更しても、アニメーションは目的の角度で停止します。したがって、角度自体は問題ありません。

問題は、ゼロから開始するか、ゼロを通過する「反時計回り」の回転を実行しているようです。常にゼロよりも小さい値は、正の角度に変換されます。

上記がバウンス効果を実装するための適切な手法である場合とは別に、CATransform3DMakeRotationを介して正(45)から負(-45)に回転する(ネストされた)レイヤーアニメーションをどのように構築しますか?

4

1 に答える 1

2

x軸を中心に回転しています。変換の視点がなければ、正の角度と負の角度の違いをどのように見ますか?遠近法がないと、正と負の回転は同じように見えます(高さが低くなります)。を設定して、変換行列の3行目と4列目の値を変更することにより、変換にパースペクティブを適用できます.m34。「CoreAnimationパースペクティブ」を検索すると、適切な説明が見つかります。

上記のコードを実行しました(単純なビューで、オレンジ色で塗りつぶされています)。回転と正と負の角度の違いがわかりやすくするために、z軸を中心に回転するように変更しました。

これらは、アニメーション中に撮った4つのスクリーンショットです。ご覧のとおり、あなたがやろうとしていることを私が誤解しない限り、負の角度は機能します。

0度 45度 -25度 0度

于 2012-05-26T14:18:54.647 に答える