バウンス効果のある単純な水平フリップアニメーションを実行しようとしています。
[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)に回転する(ネストされた)レイヤーアニメーションをどのように構築しますか?