iOS13부터는 멀티윈도우가 가능해지면서 UIStructure에 UIWindowScene이라는 개념이 새로 등장했습니다.
A scene that manages one or more windows for your app.
앱에서 1개 혹은 그 이상의 window를 관리하는 Scene입니다.
프로젝트에선 다음과 같은 형태로 볼 수 있을 것 입니다.
@MainActor class UIWindowScene : UIScene
UIWindowScene
객체는 Scene
에서 표시하는 하나 이상의 window
를 포함하여 앱의 UI 인스턴스 1개를 관리합니다.
scene객체(UIWindowScene을 지칭)는 사용자의 기기에서 window
에 표시되는 디스플레이를 관리하고, 사용자가 상호작용할 때 해당 장면의 수명주기를 관리합니다.
scene의 상태가 변경될 때, scene객체는UIWindowSceneDelegate
프로토콜을 채택하고 있는 delegate객체에게 알려줍니다.
scene은 또한 등록된 Observer들에게 적합한 알림을 보냅니다.
delegate객체 혹은 notification observer를 사용하여 상태 변경을 알립니다.
window scene객체를 직접적으로 만들지 마세요. 대신, Info.plist파일의 scene configuration detail에 scene의 클래스명을 포함하여 UIWindowScene객체를 지정하세요.
또는 다음과 같은 앱 delegate의 메소드안에서 UISceneConfiguration 객체를 만들때 또한 클래스명을 지정할 수 있다.
optional func application(_ application: UIApplication,
configurationForConnecting connectingSceneSession: UISceneSession,
options: UIScene.ConnectionOptions) -> UISceneConfiguration
사용자가 앱과 상호작용하면 시스템은 제공된 데이터를 바탕으로 적합한 scene객체를 생성합니다.
scene을 programmatically하게 생성하려면 UIApplication의 다음과 같은 메소드를 사용하세요.
func requestSceneSessionActivation(_ sceneSession: UISceneSession?,
userActivity: NSUserActivity?,
options: UIScene.ActivationRequestOptions?,
errorHandler: ((Error) -> Void)? = nil)
Additional methods that you use to manage app-specific tasks occurring in a scene.
scene에서 발생하는 앱별 작업을 관리하는데 사용하는 방법이라 합니다.
@MainActor protocol UIWindowSceneDelegate
UIWindowSceneDelegate
객체를 사용하여 앱의 user inferface중 하나의 인스턴스의 생명주기를 관리합니다.
window scene delegate는 UISceneDelegate
속성을 따르며 scene이 앱에 연결되고 foreground상태에 돌입하거나 다른 상태에 돌입하는것을 알림 받기 위해 사용합니다.
또한 underlying environment of the scene 변화에 반응하는데에 사용하기도 하는데
예를들어, 사용자가 scene의 크기를 재조정할 때, delegate를 사용하여 새로운 크기를 수용하기 위해 필요한 내용들을 변경합니다.
UIWindowSceneDelegate
객체를 직접접으로 만들면 안됩니다! 대신 scene의 configuration data의 일부로서 delegate클래스의 이름을 지정하세요.
이 정보들은 앱의 Info.plist파일이나 앱 delegate의 메소드(아래)를 통해 얻는 UISceneConfiguration
객체에서 지정 할 수 있습니다.
optional func application(_ application: UIApplication,
configurationForConnecting connectingSceneSession: UISceneSession,
options: UIScene.ConnectionOptions) -> UISceneConfiguration
출처: https://developer.apple.com/documentation/uikit/uiwindowscene/,
https://developer.apple.com/documentation/uikit/uiwindowscenedelegate