View 란 무엇인가?

  • View는 UIView의 인스턴스이거나 UIView의 하위 클래스의 인스턴스이다.
  • 자신을 어떻게 그리는지 알고 있다.
  • 터치와 같은 Event를 처리할 수 있다.
  • 뷰 계층 구조상에 존재한다.
  • View들의 Root는 Application의 Window이다.

 

프로젝트의 View Hierarchy를 보면 UIWindowScene, UIWindow, UIViewController, UIView 등이 계층적으로 생성된 걸 볼 수 있다.

 

관리

AppDelegate (~ iOS 12)

iOS 12 까지는 Window 관리를 AppDelegate에서 하였습니다.

프로젝트를 생성후에, AppDelegate에 프로퍼티로는 var window: UIWindow? 가 있었죠.

 

SceneDelegate (iOS 13 ~)

iOS 13 부터는 Window 관리를 SceneDelegate에서 합니다.

여러개의 window를 사용할 수도 있다고 합니다.

이전 App Life Cycle 포스팅에서 SceneDelegate에서는 여러개의 Scene을 사용할 수 있다고 언급했었다.

그렇다면 Window랑 Scene은 같은 개념인 것인가?

 

 

여러개의 Scene

이 상황에서는 3개의 Scene이 존재한다. 

각각의 Scene들에 대해 SceneDelegate를 통해 Life Cycle을 관리할 수 있다.

 

 

UIWindowScene

  • UIScene의 서브 클래스로 App의 하나 이상의 Window를 관리한다.
  • 직접 생성하면 안된다. 대신 configuration time에 원하는 UIWindowScene에 대해 명시하라고 한다.
    • 방법으로는 info.plist의 scene configuration details 부분에 원하는 UIWindowScene의 Class 이름을 넣으면 된다고 한다.

그림과 같이 하나의 UIWindowScene에는 여러개의 Window를 가질 수 있다.

프로퍼티로는 [UIWindow] 와 UIScreen이 있다.

또한, UISceneDelegate를 채택하는 Protocol인 UIWindowSceneDelegate가 존재한다.

우리가 프로젝트를 생성한 후, SceneDelegate 코드를 보면 UIWindowSceneDelegate Protocol을 채택한 것을 볼 수 있다.

class SceneDelegate: UIResponder, UIWindowSceneDelegate

 

 

UISceneSession

App의 Scene들 중 하나의 Scene에 대한 정보를 갖고 있는 객체이다. 그래서 내부에 scene이라는 프로퍼티가 존재한다.\

옵셔널인 이유는 scene이 session으로부터 connect/disconnect 될 수 있기 때문인 것 같다.

 

 

UIWindow

App의 UI에 대한 배경과 Event를 View에 전달하는 객체이다.

 

class UIWindow: UIView

Window들은 VC와 함께 작동하여 EVent를 처리하고, App 작업의 기본이 되는 다른 작업들을 수행한다.

사용하는 경우는 아래와 같다.

  • App의 컨텐츠를 표시할 기본 Window를 제공한다.
  • 추가 컨텐츠를 표시할 때, 필요한 경우 추가 Window를 생성한다.

쉽게 말해, UIWindow는 "액자"이고, UIView는 끼워넣는 그림/사진이다.

 

 

UIWindowScene객체를 이용해서 앱의 UI를 관리함

UIWindowScene은 UIScene을 상속받은 class이다.

-> 위에서 3개의 Scene을 가진 메모 Application인 경우, 3개의 Scene(WindowScene) 인 것 같음...

(WindowScene vs Scene 에 대한 얘기가 전혀 없다..)

 

scene은 여러개의 window들과 view controller들을 포함하며 하나의 UI의 인스턴스를 표현

 scene은 UIWindowSceneDelegate객체를 가지고 있음 (각 same memory를 공유하며 동기화)

'iOS' 카테고리의 다른 글

[iOS] UIView / 레이아웃 업데이트 관련 메소드  (0) 2021.05.24
[iOS] View LifeCycle  (0) 2021.05.24
[iOS] HitTest  (0) 2021.05.21
[iOS] Responder / Responder Chain  (0) 2021.05.21
[iOS] State Preserving/Restoring ViewControlle  (0) 2021.05.20

+ Recent posts