1. ホーム
  2. iphone

[解決済み] UIViewControllerの上にclearColor UIViewControllerを表示する

2022-04-28 21:49:40

質問

私は UIViewController ビューをサブビュー/モーダルとして、別の UIViewController ビューで、サブビュー/モーダルは透明で、サブビューに追加されたコンポーネントは何でも見えるようにする必要があります。問題は、私はサブビューがclearColorを持っている代わりに黒い背景を表示していることです。私は作ろうとしている UIView を黒背景ではなく、clearColorとして表示します。何が問題なのかわかる方いらっしゃいますか?何か提案があればお願いします。

FirstViewController.m

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];

[vc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController:vc animated:NO];  

SecondViewController.m

- (void)viewDidLoad 
{
     [super viewDidLoad];
     self.view.opaque = YES;
     self.view.backgroundColor = [UIColor clearColor];
}


解決済み : 問題点を修正しました。iPhoneでもiPadでも問題なく動作しています。モーダルビューコントローラーで、背景を黒にせず、clearColor/transparentで表示しています。ただ一つ変更しなければならないことは UIModalPresentationFullScreenUIModalPresentationCurrentContext . なんてシンプルなんでしょう

FirstViewController.m

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:NO completion:nil];


注意事項 を使用している場合 modalPresentationStyle プロパティの navigationController :

FirstViewController.m

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:NO completion:nil];


注意:悪いニュースは、上記の解決策がiOS 7で動作しないことです。良いニュースは、iOS7用の問題を修正したことです! 私は誰かに助けを求めたのですが、その人が言ったことは以下の通りです。

ビューコントローラをモーダルに表示するとき、iOS はその下にあるビューコントローラを表示中の間、ビュー階層から削除します。 モーダルに表示されたビューコントローラのビューは透明ですが、その下にはアプリのウィンドウ以外何もなく、黒く表示されます。 iOS 7 では、新しいモーダルプレゼンテーションスタイルが導入されました。 UIModalPresentationCustom これを利用すると、iOS は提示されたビューコントローラの下にあるビューを削除しないようになります。しかし、このモーダルプレゼンテーションスタイルを使用するためには、プレゼンテーションとディスイズアニメーションを処理するために、独自のトランジションデリゲートを用意する必要があります。 これは、WWDC 2013の講演「Custom Transitions Using View Controllers」で概説されています。 https://developer.apple.com/wwdc/videos/?id=218 では、独自の遷移デリゲートを実装する方法についても説明しています。

iOS7で上記の問題を解決した方法をご覧ください。 https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions

解決方法は?

解決済み : 問題点を修正しました。iPhoneでもiPadでも問題なく動作しています。モーダルビューコントローラーで、黒背景がないのは、clearColor/transparentだけです。UIModalPresentationFullScreenをUIModalPresentationCurrentContextに置き換えただけなんだけどね。なんてシンプルなんでしょう

FirstViewController.m

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
    vc.view.backgroundColor = [UIColor clearColor];
    self.modalPresentationStyle = UIModalPresentationCurrentContext;
    [self presentViewController:vc animated:NO completion:nil];


注意事項 navigationControllerのmodalPresentationStyleプロパティを使用している場合。

FirstViewController.m

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
    vc.view.backgroundColor = [UIColor clearColor];
    self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
    [self presentViewController:vc animated:NO completion:nil];


注意:悪いニュースは、上記の解決策がiOS 7で動作しないことです。良いニュースは、iOS7用の問題を修正したことです! 私は誰かに助けを求めたのですが、その人が言ったことは以下の通りです。

ビューコントローラをモーダルに表示するとき、iOS はその下にあるビューコントローラを表示中の間、ビュー階層から削除します。 iOS 7 では、新しいモーダルプレゼンテーションスタイルである UIModalPresentationCustom を導入し、iOS が、提示されたビューコントローラの下のビューを削除しないようにしました。しかし、このモーダルプレゼンテーションスタイルを使用するには、プレゼンテーションとディスイズアニメーションを処理するために、独自のトランジションデリゲートを用意する必要があります。 これは、WWDC 2013の講演「Custom Transitions Using View Controllers」で概説されています。 https://developer.apple.com/wwdc/videos/?id=218 では、独自のトランジションデリゲートを実装する方法についても説明しています。

iOS7での解決方法はこちらをご覧ください。 https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions