現在、次のようなUIViewControllerを表示しています。
[[self navigationController] presentModalViewController:modalViewController animated:YES];
次のように非表示にします:
[self.navigationController dismissModalViewControllerAnimated:YES];
アニメーションは「下から上にスライド」します...その後下にスライドします。アニメーションスタイルを変更するにはどうすればよいですか?フェードイン/フェードアウトさせることはできますか?
乾杯!
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を使用してください。
IPhone 3.0以降の場合、基本的なクロスフェードは次のように行うのが最も簡単です。
modalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[[self navigationController] presentModalViewController:modalViewController
animated:YES];
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;}];
そのはず [self.view.window]
コードが機能するために
(少なくとも、それはiOS 3.2の方法です)