본문 바로가기
IOS🍎/iOS+Swift

[iOS] UIScene, UIWindowScene, UISceneSession

by Jouureee 2021. 4. 16.

SceneDelegate.swift

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    ...
    }

SceneDelegate가 상속받는 UIWindowSceneDelegate에 대해 자세히 살펴보고자 한다.

 

우선 기본적인 UI 구조는 이렇게 되어 있다고 한다.

 

그리고 더 자세히 살펴보면 ..!

 

이렇게 UIWindow와 UIScreen 사이에 무언가가 있다!

이에 대해 자세히 살펴보자

 

UIScene

(뒤에 살펴볼 UIWindowScene과 UISceneSession이 UIScene을 상속받기 때문에 이부터 살펴볼 것이다.)

 

앱 ui의 하나 instance 또는 복사본을 의미한다

 

일반적으로 UIKit은 UIScene 객체 대신 UIWindowScene 객체를 생성하지만 이 클래스의 메서드와 속성을 사용하여 장면에 대한 정보에 액세스를 할 수 있다.

 

UIScene은 UISceneDelegate protocol을 채택한다.

씬의 상태가 변화하면 Scene 객체는 Delegate 객체에 알리고 등록 된 Observer 객체에 적절한 notification을 게시한다.

예를 들어 scene이 background 로 변화할때 사용한다.

 

scene 객체 생성

init(session: UISceneSession, connectionOptions: UIScene.ConnectionOptions)

 

지정된 세션 및 연결 정보를 사용하여 장면 개체를 만든다.

 

그리고 UISceneDelegate를 이용하여 Scene의 life-cycle events을 관리 할 수 있다.

 


 

UIWindowScene

UIScene의 서브클래스로 앱의 하나 이상의 윈도우를 관리한다.

 

씬의 상태가 변화하면 Scene 객체는 Delegate 객체에 알리는데 그것은 UIWindowSceneDelegate 프로토콜을 채택하는 객체다. 그리고 Scene 객체는 등록 된 Observer 객체에 적절한 notification을 게시함으로서 변화에 대응하는데 사용된다.

직접 windowScene을 만들지 말라고 한다. 대신에 configuration time에 네가 원하는 UIWindowScene에 대해서 명시해주라고 한다.

 

window와 screen이라는 프로퍼티를 가지고 있다.

 

SceneDelegate가 채택하고 있는 delegate가 바로 UIWindowSceneDelegate였다 !!

 

 

 


 

UISceneSession

앱의 scene 중 하나의 scene에 대한 정보를 포함하고 있는 객체다.

옵셔널인데 scene이 session으로붙러 connect & disconnect되기 때문인것 같다

 

scene 프로퍼티와 configuration 프로퍼티를 가지고 있다.

UIScene으로부터 상속받는다.

 


 

 

이렇게 해서 각자의 역할 분담은 ?

이렇게 되겠다. 다음 시간에는 UIWindow와 UIView에 대해 더 자세하게 살펴봐야겠다! 

 

.

참고 사이트 :

developer.apple.com/documentation/uikit/uiwindowscene

eunjin3786.tistory.com/164?category=706828

 

댓글