2

次のように、右側ではなく左側から pushViewController をスライドさせようとしています。

Page14Controller * controller = [[Page14Controller alloc] initWithNibName:@"Page14Controller" bundle:nil];

CATransition* transition = [CATransition animation];
transition.duration = 0.3;
transition.type = kCATransitionPush;
//                transition.type = kCATransitionMoveIn; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
//kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
transition.subtype = kCATransitionFromLeft; 
//kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom
[self.navigationController.view.layer addAnimation:transition forKey:nil];

[self.navigationController pushViewController:controller animated:NO];

これを行うと、現在のコントローラーが白くなり、見栄えが悪くなります。なぜこれが起こるのですか?現在のビューのアルファの背景を 0 に設定しようとしました。

4

2 に答える 2

7

どうやら白い閃光の原因は何かを突き止めました。それはメイン ウィンドウの背景でした。これを alpha=0 に設定すると、白の効果が向上します。kCATransitionPush は実際に画面から押し出されているビューをフェードしているように見えます。明らかに、その下にあるものが緑色の場合、緑色にフェードします。色褪せなければ良いのですが、それはまた別問題です。

于 2011-06-23T05:42:51.260 に答える
0

UIViewController のビューをいじりすぎないようにします。

あなたが望むものを達成するためのより簡単な方法は、次のようなものです:

UINavigationController * nc = self.navigationController;
NSArray * viewControllers = ;
NSMutableArray * newControllers = [NSMutableArray arrayWithArray:[nc viewControllers]];
[newControllers insertObject:controller atIndex:newControllers.count-1];
nc.viewControllers = newControllers;
[nc popViewControllerAnimated:YES];

トップビューコントローラーをプッシュするだけでなく、新しいコントローラーに置き換えることに注意してください。これはあなたが望むものではないかもしれません (しかし、ページ変更をシミュレートするためにそれを使用している場合は、メモリがなくなるまでコントローラーを永続的にプッシュしたくないでしょう)。

于 2011-06-22T03:47:40.980 に答える