Search
🌁

UIScene, UIWindowScene, UIWindow

안녕하세요 iOS 개발자 루크입니다!
오늘은 iOS 13 부터 멀티윈도우 지원에 따라 새로 등장한 개념인
UIScene, UIWindowScene, UISceneSession 에 대해서 알아보도록 하겠습니다
멀티윈도우 지원에 따라” 라는 문장에 집중해 보면 이녀석들이 뭐하는 녀석들인지 빠르게 이해할 수 있습니다.
하나의 앱이 여러개의 창을 띄울 수 있게 된건데요
먼저 UIScene 이녀석은 하나의 창이라고 생각하시면 됩니다.
보통은 UIScene 을 사용해서 앱의 UI의 객체를 그리는 것이 아니라, UIWindowScene 객체로 앱의 UI 객체를 생성하는 데요, 하지만
UIWindowScene 자체도 UIScene 을 상속받고 있기 때문에, UIWindowScene 의 객체에서 UIScene 의 메서드 및 프로퍼티에 접근이 가능합니다.
UIScene 및 UIWindowScene 은 모두 delegate 를 지니고 있고 scene 의 상태가 변함에 따라 해당하는 delegate 객체의 메서드를 호출함으로써 scene lifeCycle 이벤트에 적절히 반응할 수 있도록 해줍니다.
이게 바로 우리가 익숙한
SceneDelegate 클래스 되시겠습니다.
SceneDelegate 에 대한 자세한 설명은
을 참고해주세요 ~,~
이쯤 되었을 때, 이 그림을 한번 이해해 봅시다.
UIWindowScene 이라는 것은, 하나의 창이라고 보면 되고,
이는 UIScreen 위에 올라가게 되며.
멀티 윈도우 기능을 사용하는 경우에는 두개의 창(UIWindowScene)이 화면에 나타나고 있다라고 이해할 수 있겠네요.
그럼 UIWindow 는 뭘까요?
대부분의 앱은 기기의 기본화면에 앱의 콘텐츠를 표시하는 하나의 window 만 있으면 됩니다.
추가 window 를 만들어 기기에 표시할 수는 있기는 하나, 추가 window 는 연결된 외부 디스플레이에 콘텐츠를 표시하는 데 더 일반적으로 사용됩니다.

UIWindow

UIWindow 는 사용자 인터페이스에 배경을 제공하고, 중요한 이벤트 처리 행동을 제공하는 객체이다. Window 자체는 시각적인 외관을 가지고 있지 않지만, 앱의 View 를 사용자게에 보여주는 데 중요한 역할을 한다. 스크린에 나타는 모든 View 는 Window 로 묶여 있으며, 각 Window 는 앱의 다른 View 와 독립적입니다.
UIWindow 는 UIView 의 하위 클래스이다
따라서, Window 는 그자체가 View 라고 할 수 있다.
하지만 외관은 가지지 않고 여타 다른 View 들을 감싸는 액자같은 역할을 한다.
각각의 View 들에게 이벤트를 전달해주는 매개체이다.
우리는 SceneDelegate 에서 window 객체를 만나볼 수 있습니다.
즉 액자에 접근할 수 있는 것이지요…!
스토리보드를 사용하는 경우에는 Xcode 가 앱의 메인 윈도우를 자동으로 제공합니다.
만약 스토리보드를 사용하지 않고 코드로 UI 를 구성한다면 윈도우를 직접 생성해야합니다.
iOS 12 버전 이하 or AppDelegate 만 사용하는 경우
StoryBoard 사용시 → 윈도우 객체 생성할 필요 없음 ( Xcode 가 대신해줌)
StoryBoard 미 사용시 → 윈도우 객체 따로 생성해 주어야함.
→ AppDelegate 의 didFinishWithLaunchingOptions: 에서 UIWindow()
iOS 13 버전 이상 SceneDelegate 사용시
StoryBoard 사용시 → 윈도우 객체 생성할 필요 없음 ( Xcode 가 대신해줌)
StoryBoard 미 사용시 → 윈도우 객체 따로 생성해 주어야함.
→ SceneDelegate 의 willConnectTo: 메서드에서 직접 생성

UIWindow 객체를 통해 할 수 있는 작업

1.
윈도우의 z 축 좌표를 설정하여, 다른 윈도우의 관계에 따라 보이는 정도를 조절할 수 있습니다 (뷰 계층과 유사)
2.
윈도우를 보여주고, 키보드 이벤트의 타겟으로 설정할 수 있습니다.
3.
윈도우 좌표 시스템의 좌표를 변환할 수 있습니다.
4.
윈도우의 Root ViewController 를 변경할 수 있습니다.
5.
윈도우가 표시되고 있는 (기기)스크린을 변경할 수 있습니다.
오늘 포스팅은 여기서 마치도록 하겠습니다 🫠