69

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

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

次のように隠します。

[self.navigationController dismissModalViewControllerAnimated:YES];

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

乾杯!

4

4 に答える 4

194

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

modalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[[self navigationController] presentModalViewController:modalViewController
                                               animated:YES];
于 2010-01-05T14:43:52.050 に答える
60

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 の投稿に感謝します。

于 2008-10-26T01:46:43.357 に答える
8

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;}];
于 2010-10-08T16:28:08.940 に答える
2

[self.view.window]コードが機能するために必要です

(少なくとも ios 3.2 ではそうです)

于 2010-09-02T23:41:05.683 に答える