2

2つのビューがあり、コアアニメーションを使用して、各ビューのレイヤーをアニメーション化して2つのビューを切り替えたいと思います。私が欲しいアニメーションは提供されたもののようなものですがUIViewAnimationOptionTransitionFlipFromLeft、私はそれを行うことができませんでした。レイヤーを180度回転させ、アニメーションが停止したら次のビューに移動します。これはどのように行うことができますか?

私は以下のようにコードを使用しました:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
self.view.layer.zPosition = 100;
CATransform3D transform = CATransform3DMakeRotation(M_PI, 0, 1, 0);
[animation setToValue:[NSValue valueWithCATransform3D:transform]];
[animation setDuration:.5];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
[animation setFillMode:kCAFillModeForwards];
[animation setRemovedOnCompletion:YES];
[animation setDelegate:self];

[self.view.layer addAnimation:animation forKey:@"test"];

デリゲートでは、次のビューに移動します。ただし、これはあまり意味がなく、アニメーションはデフォルトのアニメーションで提供されるほど活発ではありません。これはどのように達成できますか?

4

2 に答える 2

7

3D回転のように見せるための方法

変換の視点がないため、回転は3D空間で発生するようには見えません。m34変換の値を1.0/800.0のような小さな値に変更すると、遠近法で回転するのがわかります。

CATransform3D transform = CATransform3DMakeRotation(M_PI, 0, 1, 0);
transform.m34 = 1.0/800.0;
[animation setToValue:[NSValue valueWithCATransform3D:transform]];

3D変換のその値(3列目、4行目)は、変換のパースペクティブを制御します。それがどのように機能するかについてもっと知りたい場合は、ウィキペディアで3Dプロジェクションについてもっと読むことができます。

カードの側面にあるかのように2つのビューを反転する方法

2つのビューが同じビューの2つの側面であるように見せるために、それらを追加して、裏側をπ度回転させ、doubleSided両方のレイヤーのレイヤーのプロパティをNOに変更する必要があります。これで、あなたとは反対の方向を向いているときに、それらは表示されなくなります。前のレイヤーと後ろのレイヤーの両方に回転を適用すると、表示されるレイヤーが変わります。注:前面をπ度に回転させ、背面を2πに回転させて、回転を完了し、自分の方を向くようにします。

于 2012-08-10T19:01:13.170 に答える
5

あなたが使うことができます

    [UIView transitionFromView:aView
                    toView:bView
                  duration:0.3
                   options:UIViewAnimationOptionTransitionFlipFromLeft
                completion:^(BOOL finished) {
                }
 ];

同じスーパービュー内に両方のビューを配置したい場合は、少し面倒になります。

于 2012-08-11T13:46:29.713 に答える