利点、問題、iOSアプリに別のUIWindowを追加する例?


92

最近、iOSアプリにはが1つしかないのではないかと考えていUIWindowます。別のものを作成UIWindowして画面に配置することは問題ではないようです。

私の質問は漠然としていますが、私は興味があります:

  • UIWindow他の方法では実行できない1秒で何を達成できる可能性がありますか?
  • 複数のUIWindowインスタンスを使用すると何がうまくいかないのですか?
  • 私はUIWindow、iPhoneのビューのようにポップオーバーを表示するために2番目を使用することを見てきました。これは良い方法ですか?どうして?何故なの?
  • 別のものを持つことが完全に理にかなっている他の例はありUIWindowますか?

何かが足りないということではありません。私は別のUIWindowインスタンスを作成する必要性を感じたことはありませんが、おそらくそれが私が気付いていない驚くべきことを可能にするでしょう!:-)

この問題の解決に役立つことを願っています。現在表示されているものの上に「カバービュー」を追加する必要があります。すでに1つ以上のモーダルコントローラーが表示されている場合にも機能します。UIViewルートコントローラーのビューにを追加すると、モーダルコントローラーが上に配置されるため、ポップオーバーコントローラーも配置されます。カバービューをモーダルで表示し、すでにモーダルコントローラーがある場合、画面の一部のみが覆われます。


iOSアプリケーションでの複数のUIWindowsの使用shaune.com.au/using-multiple-uiwindows-in-ios-applications
onmyway133 '28

回答:


26

Aは、UIWindowシステムのキーボードのような他のUI要素の上に浮くことができます。

最後の段落に対処するには:UIWindowメインウィンドウと同じフレームでa を作成します。その設定するwindowLevelにプロパティをUIWindowLevelStatusBarhiddenプロパティをに設定しますNO


ええ、大丈夫です。ありがとう。私はそれを知っていました。私の質問について少し詳しく教えてもらえますか?makeKeyAndVisibleによって追加された秒のUIWindowのRIDを取得する方法を知っていますか?
Krumelur

2番目のUIWindowの非表示プロパティをYESに設定します。
rob mayoff

ありがとう。そして、私はそれをキーにして可視化してウィンドウを表示しますか?そして、私は別のウィンドウを表示して他のウィンドウを破棄するだけで非表示にしますか?UIActionSheetのようにUIWindowをアニメーション化するにはどうすればよいですか?
Krumelur

これに注意してください。!= UIWindowLevelNormalの場合、キーボードはその下に表示されます<iOS7。
ショーン

108

ロブの答えから始めて、私は少し遊んで、このトピックに関する情報を得ようとしている他の人のためにいくつかのメモを書きたいと思います:

  • 別に追加してもまったく問題ありませんUIWindow。1つ作成してくださいmakeKeyAndVisible。できました。
  • 別のウィンドウを表示して削除し、不要になったウィンドウを解放します。
  • 「キー」であるウィンドウは、すべてのキーボード入力を受け取ります。
  • UIWindow モーダル、ポップオーバーなど、すべてをカバーします。素晴らしい!
  • UIWindow常に暗黙的にポートレートです。回転しません。コントローラーを新しいウィンドウのルートコントローラーとして追加し、回転を処理させる必要があります。(メインウィンドウと同じ)
  • ウィンドウのレベルは、ウィンドウの表示レベルを決定します。UIWindowLevelStatusBarすべてをカバーするように設定します。hiddenプロパティをNOに設定します。
  • 2番目UIWindowを使用すると、すべての上に浮かぶ画面上のビューを表示できます。ダミーのコントローラーを作成せずに、それをUIPopoverController
  • これは、ポップオーバーコントローラーがないiPhoneで特に役立ちますが、そのようなものを模倣したい場合があります。
  • はい、もちろん問題は解決しました。アプリがアクティベーションを辞任する場合、iOSがアプリの現在のコンテンツのスクリーンショットを撮らないように、現在表示されているものの上にカバーウィンドウを追加します。

答えがなければ、別のUIWindowを使用する勇気はなかったでしょう。2番目のUIWindowはそれ自体では自動回転しないため、これも非常に役立ちました。
Dan Abramov 2012

1
非常に啓発的なポスト。しかし、このウィンドウを辞任し、基になるウィンドウキーを表示して、この基になるウィンドウのrootViewControllerに現在表示されているモーダルコントローラーがある場合はどうなりますか?モーダルビューコントローラーが表示されますか?アプリケーションで何が起こるかというと、rootViewControllerはモーダルなものではなく表示されるということです...
Nava Carmon

@Krumelurこれで結構です。私は疑問を持っています。つまり、2番目のUIWindowが現在のすべてのビューの上に表示されているとします。ユーザーがもう1つのビューコントローラーを表示している最初のUIWindowにあるビューで1つのボタンをクリックしたとき。この2番目のUIWindowは非表示になります。このUIWindowを常にアプリ全体に表示する方法。
Easwaramoorthy K 2013

1
カスタムスタイルのアラートビューとiphoneポップオーバーの実装には、常にUIWindowを使用しています。それは常にビューをフルスクリーンにし、フルスクリーンビューを含み、別の「コンテンツ」ビューを内部に埋め込むので、外部ビューがすべてのタッチイベントをキャッチします(そして、素敵な影を追加して他のコンテンツを暗くすることができます^^)
Martin Ullrich

3
2番目のウィンドウは、表示するためだけに保持されるわけではないことに注意してください(通常のビューがスーパービューによって保持されるのとは対照的です)。
Rivera

0

ここにあるアップル社のドキュメントをより良く理解UIWindowのために: https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/WindowAndScreenGuide/WindowScreenRolesinApp/WindowScreenRolesinApp.html

UIWindowの複数のインスタンスを使用する特定の理由の1つは、アプリ画面をビデオ録画する必要がある場合です。最終的な録画ビデオに特定の要素(録画ボタン、録画ステータスなど)を含めたくない場合があるので、それらの要素を別のUIWindowの上部に配置できます。

実際、ReplayKit 使用している場合は、これらの除外されたUI要素に対して個別のUIWindow 使用する必要があります。詳細はこちら:https : //medium.com/ar-tips-and-tricks/how-to-record-a-screen-capture-with-replaykit-whilst-hiding-the-hud-element-bedcca8e31e

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.