web-dev-qa-db-ja.com

モーダルUIViewControllerを使用した透明な背景

私はジレンマを抱えています。ユーザーに半透明のビューを提示したいと思います。

実験して、透明ビューをNavigationControllerのスタックの一番上にプッシュしただけでは、必要な透明レベルがレンダリングされないことがわかりました。そこで、スタックの一番上にある現在のビューのサブビューとしてビューを追加することにしました。

このソリューションは機能し、下のビューは引き続き表示され、ビューは「セミモーダル」です。問題は、親ビューがUITableViewControllerを継承している場合(私のように)、そのビューに「プッシュ」すると、上部のナビゲーションバーがカバーされないことです。

このビューを押すたびにナビゲーションバーのコントロールを有効/無効にする必要がある状況に陥りたくないので、ビューを表示するために使用できるソリューションを誰かが知っているかどうか疑問に思いましたUITableViewControllerにプッシュすると、実際にはナビゲーションバーが「プッシュオーバー」されますか?

20
Mick Walker

iOS8はUIModalPresentationOverFullScreenプレゼンテーションスタイル を追加しました。これを提示されたビューコントローラの modalPresentationStyle として設定します。より高度なニーズについては、カスタム プレゼンテーションコントローラー の作成を検討してください。

13
Douglas Hill

IOS7カスタムトランジションを使用してこれを実現する方法があります。

MyController * controller = [MyController new];
[controller setTransitioningDelegate:self.transitionController];
controller.modalPresentationStyle = UIModalPresentationCustom;
[self controller animated:YES completion:nil];

カスタムトランジションを作成するには、次の2つが必要です。

  • TransitionDelegateオブジェクト(<UIViewControllerTransitionDelegate>の実装)
  • 「AnimatedTransitioning」オブジェクト(<UIViewControllerAnimatedTransitioning>を実装)

このチュートリアルでカスタムトランジションの詳細を見つけることができます: http://www.doubleencore.com/2013/09/ios-7-custom-transitions/

11
Kirualex

これを試して:

ViewController *vc = [[ViewController alloc] init];
[vc setModalPresentationStyle:UIModalPresentationOverCurrentContext];
[self presentViewController:vc animated:YES completion:nil];
0
Hsm