web-dev-qa-db-ja.com

モーダルUIViewControllerのアニメーションスタイルを変更するにはどうすればよいですか?

現在、次のようなUIViewControllerを表示しています。

[[self navigationController] presentModalViewController:modalViewController animated:YES];

次のように非表示にします:

[self.navigationController dismissModalViewControllerAnimated:YES];

アニメーションは「下から上にスライド」します...その後下にスライドします。アニメーションスタイルを変更するにはどうすればよいですか?フェードイン/フェードアウトさせることはできますか?

乾杯!

69
MrDatabase

Marcus Zarraは、これに対する優れたソリューションをSDKメーリングリストに投稿しました。

UIViewController *controller = [[[MyViewController alloc] init] autorelease];
UIViewAnimationTransition trans = UIViewAnimationTransitionCurlUp;
[UIView beginAnimations: nil context: nil];
[UIView setAnimationTransition: trans forView: [self window] cache: YES];
[navController presentModalViewController: controller animated: NO];
[UIView commitAnimations];

反転とページカールの切り替えがあります。フェードに設定されている場合は、新しいビューのアルファを調整してみてください。

UIViewController *controller = [[[MyViewController alloc] init] autorelease];
controller.view.alpha = 0.0;
[navController presentModalViewController: controller animated: NO];
[UIView beginAnimations: nil context: nil];
controller.view.alpha = 1.0;
[UIView commitAnimations];

ただし、おそらく必要なのはクロスフェード、または少なくともフェードオーバーです。 UINavigationControllerが新しいビューに切り替わると、古いビューが削除されます。この効果を得るには、おそらく、既存のUIViewControllerに新しいビューを追加し、時間の経過とともにアルファをフェードインすることをお勧めします。

注:アプリのデリゲートにいない場合、[セルフウィンドウ]は機能しません。これを指摘してくれたuser412500の投稿のおかげで、self.view.windowを使用してください。

60
Ben Gottlieb

IPhone 3.0以降の場合、基本的なクロスフェードは次のように行うのが最も簡単です。

modalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[[self navigationController] presentModalViewController:modalViewController
                                               animated:YES];
194
Simo Salminen

IOS 4でアルファフェードを更新するには:

modalController.view.alpha = 0.0;
[self.view.window.rootViewController presentModalViewController:modalController animated:NO];
[UIView animateWithDuration:0.5
                 animations:^{modalController.view.alpha = 1.0;}];
8
Peter DeWeese

そのはず [self.view.window]コードが機能するために

(少なくとも、それはiOS 3.2の方法です)

2
user412500