iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【Swift】UIWindowを使用してポップアップを表示する

今回は、iOSアプリでポップアップを表示する際に UIWindow を使ってグローバルに表示できるような実装を行ったので、そのメモを残しておきます👷‍♀️

やっていく

とりあえず、ポップアップを表示するための Class は下記のようになります。AppDelegate なんかで直接 windowインスタンスを生成したことがある方はわかると思いますが、UIWindowmakeKeyAndVisible() メソッドは、その UIWindowkey 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 のモーダル遷移のようにスコープ内でインスタンス生成してもいいんじゃない?と思う方もいるかもしれませんが、UIWindowView 階層のルートになる特別なView なので、基本的にクラス内でインスタンスを保持していない場合は、メモリが開放されてしまい何も表示されません。

    func show() {
        let window: UIWindow = {
            let window = UIWindow()
            let popupView = UIView()
            window.addSubview(popupView)
            window.backgroundColor = .clear
            return window
        }()
        window.makeKeyAndVisible()
    }

ちなみに、UIWindow に表示する View.rootViewControllerViewController を設定することもできますが、UIView を継承しているので、今回のように直接 View を追加することもできます。

てな感じで本日も以上になります🍺

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com