次のコードを使用して、CATransition でビューを切り替えています。
CATransition *applicationLoadViewIn = [CATransition animation];
[applicationLoadViewIn setDuration:20];
[applicationLoadViewIn setType:kCATransitionPush];
[applicationLoadViewIn setSubtype:kCATransitionFromTop];
[applicationLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
ViewToSwitchTo *myviewcontroller = [[ViewToSwitchTo alloc] init];
[self.view.layer addAnimation:applicationLoadViewIn forKey:kCATransitionPush];
[self.view addSubview:myviewcontroller.view];
それはほとんど私が望むように機能します。本来なら上から押すのだが、なぜか挙動がおかしくなる。まず、切り替え先のビューが下から入ってきますが、何らかの理由で、切り替え元のビューが不透明度の低い上に表示されるため、両方が表示されます。ただし、入ってくるビューも、それ自体と他のビューの上に 100 ピクセルほど上に移動し、再び不透明度が低くなります。移行の中間点の直前に、すべてが正常に機能し、入ってくるビューと出ていくビューだけが表示され、本来行うべきことを実行します。しかし、中間点の少し後、切り替え元のビューの下に、切り替え先のビューが最終目的地に表示され、切り替え元のビューの不透明度が低下します。
ここで何が起こっているのですか?