【Swift】UIWindowを使用してポップアップを表示する
今回は、iOSアプリでポップアップを表示する際に UIWindow
を使ってグローバルに表示できるような実装を行ったので、そのメモを残しておきます👷♀️
やっていく
とりあえず、ポップアップを表示するための Class
は下記のようになります。AppDelegate
なんかで直接 window
のインスタンスを生成したことがある方はわかると思いますが、UIWindow
の makeKeyAndVisible()
メソッドは、その UIWindow
を key window
としてアプリケーションの最前面に表示するメソッドです。
final class PopupManager { private let window: UIWindow = { let window = UIWindow() let popupView = UIView() window.addSubview(popupView) window.backgroundColor = .clear return window }() func show() { window.makeKeyAndVisible() } func dismiss() { self.window.isHidden = true } }
ちなみに、新しい画面を最前面に表示するからViewController
のモーダル遷移のようにスコープ内でインスタンス生成してもいいんじゃない?と思う方もいるかもしれませんが、UIWindow
は View
階層のルートになる特別なView
なので、基本的にクラス内でインスタンスを保持していない場合は、メモリが開放されてしまい何も表示されません。
func show() { let window: UIWindow = { let window = UIWindow() let popupView = UIView() window.addSubview(popupView) window.backgroundColor = .clear return window }() window.makeKeyAndVisible() }
ちなみに、UIWindow
に表示する View
は .rootViewController
で ViewController
を設定することもできますが、UIView
を継承しているので、今回のように直接 View
を追加することもできます。
てな感じで本日も以上になります🍺
参考
- https://qiita.com/KosukeOhmura/items/a3dd4f4678291ddb8a6a
- https://developer.apple.com/documentation/uikit/uiwindow/1621601-makekeyandvisible