iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0
Software Development

iOS 學習筆記系列 第 4

Day04 UIKit 03 - SceneDelegate

SceneDelegate

從 iOS 13 開始,SceneDelegate 承擔了 AppDelegate 的一些職責,特別是 AppDelegate 中的 UIWindow 現在是 SceneDelegate 中的 UIScene,SceneDelegate 負責將數據和 UI 顯示在屏幕上。

當你處理場景時,對用戶來說看起來像一個窗口的東西實際上被稱為 UIScene,它由 UISceneSession 管理。 所以當我們提到 windows 時,實際上指的是 UISceneSession 物件

其中 SceneDelegate 有以下六種主要的方法:

  • scene(_:willConnectTo:options:)
  • sceneWillEnterForeground(_:)
  • sceneDidBecomeActive(_:)
  • sceneDidDisconnect(_:)
  • sceneWillResignActive(_:)
  • sceneDidEnterBackground(_:)

這些方法類似於在 iOS 13 以前的 AppDelegate 中使用的方法,以下讓我們來個別介紹

  1. scene(_:willConnectTo:options:)

    這是 UISceneSession 生命週期中調用的第一個方法,它將創建一個新的窗口 UIWindow,並設置窗口的 rootViewController,並使該窗口成為將顯示的關鍵窗口,在使用 Storyboard 時,窗口屬性將自動初始化並附加到場景中

  2. sceneWillEnterForeground(_:)

    場景連接完成後,當場景即將開始時會調用此方法,例如當應用程序第一次變為活動狀態active 或從後台過渡到前台時

  3. sceneDidBecomeActive(_:)

    在場景從非活動狀態變為活動狀態時調用,此方法在調用 sceneWillEnterForeground方法之後也會立即調用,此時場景已設置完且可見並可供使用

  4. sceneWillResignActive(_:)

    當場景從活動狀態移動到非活動狀態時調用,這可能是由於臨時中斷(例如收到來電)而發生

  5. sceneDidEnterBackground(_:)

    當場景從前景過渡到背景時調用,使用此方法保存數據、釋放共享資源、存儲足夠多的場景特定狀態資訊以將場景恢復到當前狀態

  6. sceneDidDisconnect(_:)

    每當場景被發送到後台時,iOS 可能會決定斷開連接並清除您的場景以釋放資源。 但這並不意味著應用程序被終止或不再運行,只是場景與 session 斷開連接並且不再處於活動狀態。 當用戶再次將該特定場景置於前台時,iOS 可以決定將該場景重新連接回場景 session

    Session被用於指定場景,可用於還原場景的狀態,可以將用戶資訊存儲到場景 session 中,它是一個可以放入任何內容的dictionary

    此方法要做的最重要的事情是丟棄所有不需要的資源,例如從硬碟或網路加載的數據。以及確保您保留任何重要以及難取得的數據,例如,用戶在場景中提供的任何輸入,當他們返回場景時,他們希望仍然存在。


上一篇
Day03 UIKit 02 - App Delegate
下一篇
Day05 UIKit 04 - 在 Storyboard 上設計畫面
系列文
iOS 學習筆記30

尚未有邦友留言

立即登入留言