最近、iOSアプリにはUIWindow
が1つしかないという事実に疑問を抱いてきました。別のUIWindow
を作成して画面に配置することは問題ではないようです。
私の質問はちょっと曖昧ですが、私は興味があります:
UIWindow
で何を達成できる可能性がありますか?UIWindow
インスタンスを使用すると何が問題になる可能性がありますか?UIWindow
を使用して、iPhoneでビューのようなポップオーバーを表示することを見てきました。これは良い方法ですか?どうして?何故なの?UIWindow
を持つことが完全に理にかなっている他の例はありますか?私が何かを見逃しているわけではありません。別のUIWindow
インスタンスを作成する必要性を感じたことはありませんが、気付いていないすばらしいことを実行できるかもしれません。 :-)
この問題の解決に役立つことを期待しています。現在表示されているものの上に「カバービュー」を追加する必要があります。既に1つ以上のモーダルコントローラーが提示されている場合にも機能するはずです。 UIView
をルートコントローラーのビューに追加すると、モーダルコントローラーが最上位になり、ポップオーバーコントローラーも最上位になります。カバービューをモーダルモードで表示し、既にモーダルコントローラーが存在する場合、画面の一部のみがカバーされます。
UIWindow
は、システムキーボードなどの他のUI要素の上に浮くことができます。
最後の段落に対処するには:メインウィンドウと同じフレームでUIWindow
を作成します。 windowLevel
プロパティをUIWindowLevelStatusBar
に設定します。 hidden
プロパティをNO
に設定します。
Robの回答から始めて、私は少し遊んで、このトピックに関する情報を取得しようとしている他の人のためにいくつかのメモを書きたいと思います。
UIWindow
を追加してもまったく問題ありません。 1つとmakeKeyAndVisible
を作成するだけです。できた.UIWindow
は、モーダル、ポップオーバーなど、すべてをカバーします。素晴らしい!UIWindow
は常に暗黙的にポートレートです。回転しません。新しいウィンドウのルートコントローラーとしてコントローラーを追加し、そのハンドルを回転させる必要があります。 (メインウィンドウと同じように)UIWindowLevelStatusBar
に設定します。 hidden
プロパティをNOに設定します。UIWindow
を使用して、すべての上に浮かぶビューを画面に表示できます。ダミーのコントローラーを作成せずに、UIPopoverController
に埋め込みます。UIWindowをよりよく理解するためのAppleのドキュメント: https://developer.Apple.com/library/archive/documentation/WindowsViews/Conceptual/WindowAndScreenGuide/WindowScreenRolesinApp/WindowScreenRolesinApp.html
UIWindowの複数のインスタンスを使用する特定の理由は、アプリ画面をビデオ録画する必要がある場合です。最終的な録画済みビデオに特定の要素(録画ボタン、録画ステータスなど)を含めたくない場合があります。そのため、これらの要素を別のUIWindowに配置できます。
実際、ReplayKitを使用している場合、have toはこれらの除外されたUI要素に別のUIWindowを使用します。詳細はこちら: https://medium.com/ar-tips-and-tricks/how-to-record-a-screen-capture-with-replaykit-whilst-hiding-the-hud-element- bedcca8e31e