【Swift UIKit】UISceneDelegateを使ってライフサイクルを管理する方法

UISceneDelegateはiOS 13以降で導入され、複数のウィンドウ表示に対応したアプリを開発する際に実装が必要なオブジェクトです。

UISceneDelegateに関する解説を行います。

スポンサーリンク

Scene(シーン)とは?

iOSアプリケーションにおいて、ユーザーインターフェース(UI)の一部を表す概念がSceneです。

マルチウィンドウが可能な環境では、1つのアプリを複数のウィンドウで表示し、それぞれ操作が可能です。各ウィンドウごとにSceneの管理が出来、ウィンドウ単位でDelegateの管理が可能です。

UIViewControllerやUIViewなどのユーザーインターフェースの要素と組み合わせて使用します。

Sceneを活用することで、ユーザーは同時に複数のタスクを実行し、異なるウィンドウやデバイスでアプリケーションを使用することができます。

基本概念

  • 1つ以上のUIシーン(Scene)のイベントに対応するために利用します。
  • 通常、各UIシーンには対応するUIViewControllerが関連付けられています。

アプリが起動したとき【scene(_:willConnectTo:options:)】

アプリが起動したときに呼び出されます。

UIWindowのインスタンス作成や起動時のviewControllerを設定します。

Storyboardを使って開発している場合は、自動でUIWindowのインスタンス作成とviewControllerが設定されます。

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // sceneが追加されたときに行う処理
}

終了したとき【sceneDidDisconnect(_:)】

sceneが終了したときに呼び出されます。

func sceneDidDisconnect(_ scene: UIScene) {
    // sceneが終了されたときに行う処理
}

画面表示したとき【sceneDidBecomeActive(_:)】

sceneがフォアグラウンド アクティブ状態に移行したとき(画面表示したとき)に呼び出されます。

func sceneDidDisconnect(_ scene: UIScene) {
    // sceneがフォアグラウンド アクティブ状態に移行したとき(画面表示したとき)に行う処理
}

非アクティブになったとき【sceneWillResignActive(_:)】

sceneが非アクティブ(他のアプリに切り替えた等)になる直前に呼び出されます。

func sceneWillResignActive(_ scene: UIScene) {
    // sceneが非アクティブになる直前に行う処理
}

バックグラウンド状態になったとき【sceneDidEnterBackground(_:)】

sceneがバックグラウンドに移動したとき(画面に表示されておらず、裏側で動作しているとき)に呼び出されます。

func sceneDidEnterBackground(_ scene: UIScene) {
    // sceneがバックグラウンドに移動したときに行う処理
}

画面表示する直前のとき【sceneWillEnterForeground(_:)】

sceneがフォアグラウンド アクティブ状態に移行する直前(画面表示する直前)に呼び出されます。

func sceneWillEnterForeground(_ scene: UIScene) {
    // sceneがフォアグラウンド アクティブ状態に移行する直前の処理
}

コメント

タイトルとURLをコピーしました