25

最初のビューがモーダル ビューの下にわずかに見えるように、現在のビューの上にモーダルで背景がわずかに透明なビュー コントローラーを表示したいと考えています。

別の投稿で提案されているように、モーダル ビュー コントローラーのアルファ値を設定し、 を に設定しmodalPresentationStyleました。UIModalPresentationCurrentContext

その結果、アニメーション化するとビューの背景が透明になりますが、View Controller が配置されると不透明な黒に変わります。解雇をアニメーション化しながら透明に戻ります。

アクティブなときに透明にするにはどうすればよいですか?

でテストしましたiOS 6 and 7。私が使用しているコードは次のとおりです。

MyModalViewController *viewController = [[MyModalViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[navController setNavigationBarHidden:YES];
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self.navigationController presentViewController:navController animated:YES completion:NULL];
4

8 に答える 8

42

iOS 8 では、特にこの目的のために、新しいモーダル プレゼンテーション スタイルが追加されました。

presentedViewController.modalPresentationStyle = UIModalPresentationOverFullScreen

仕様から:

UIModalPresentationOverFullScreen

提示されたビューが画面全体を覆うビュー プレゼンテーション スタイル。提示されたコンテンツの下にあるビューは、プレゼンテーションが終了してもビュー階層から削除されません。そのため、表示されたビュー コントローラーが画面を不透明なコンテンツで満たしていない場合は、下にあるコンテンツが透けて見えます。

于 2015-07-14T17:13:19.600 に答える
2

モーダルが表示された後に BG ビュー コントローラーが消える理由は、アニメーションの完了後に iOS 7 のデフォルト遷移が BG ビューを削除するためです。独自のトランジションを定義し、BG ビューを削除しないように設定した場合 (アルファを変更するだけ)、透明なモーダル ビューが表示されます。

于 2014-05-09T06:47:58.037 に答える
1

私の解決策はこれです:

任意のビュー、ナビゲーション バー、およびタブバーに表示されるカスタムの透過オーバーレイ UIView を作成します。

-ビューコントローラーが埋め込まれているナビゲーションコントローラー(またはタブバーコントローラー)で、ナビゲーションコントローラーのビューのフレームと同じフレームを持つカスタムビューを作成します。

-次に、origin.yをnavigationController.view.heightに設定してオフスクリーンに設定します

-次に、2 つの関数 -(void)showOverlay と -(void)hideOverlay を作成し、画面のオンとオフでオーバーレイ ビューをアニメーション化します。

- (void)hideOverlay{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];

    CGRect frm = self.helpView.frame;//helpView is my overlay
    frm.origin.y = self.offscreenOffset; //this is an Y offscreen usually self.view.height
    self.helpView.frame = frm;

    [UIView commitAnimations];
}

- (void)showOverlay{

    [self.view bringSubviewToFront:self.helpView];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];

    CGRect frm = self.helpView.frame;
    frm.origin.y = self.onscreenOffset;
    self.helpView.frame = frm;

    [UIView commitAnimations];
}

-私のView Controllerでは、呼び出すことができます

[(MyCustomNavCtrl *)self.navigationController showOverlay];
[(MyCustomNavCtrl *)self.navigationController hideOverlay];

そしてそれはそれについてです。

于 2014-03-31T12:30:40.203 に答える
1

参考までに: 構文は次のとおりです。

    childVC.modalPresentationStyle = UIModalPresentationStyle.OverFullScreen
于 2016-08-26T22:34:03.027 に答える
1

これが解決策です。

提示ビュー コントローラーを作成します。このビュー コントローラーのメイン ビューに backView を追加します。これを と名付けbackViewます。

SecondViewController.m

-(void)viewDidLoad
{
    // Make the main view's background clear, the second view's background transparent.
    self.view.backgroundColor = [UIColor clearColor];
    UIView* backView = [[UIView alloc] initWithFrame:self.view.frame];
    backView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
    [self.view addSubview:backView];
}

これで、背景が半分透明なビュー コントローラーができました。には何でも追加できますself.view。残りは半分透明になります。

その後、FirstViewController.m

self.modalPresentationStyle = UIModalPresentationCurrentContext;

[self presentViewController:secondViewController animated:YES completion:nil];
于 2013-12-12T09:16:11.297 に答える
-2

AppDelegateでこれを設定してみませんか

self.window.rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;

次に、表示されているビューのアルファを変更します

于 2014-04-15T09:00:56.597 に答える