AppDelegate나 SceneDelegate 클래스에서 볼 수 있는 window속성, 이 window는 무엇이고 어떤 역할을 할까?
The backdrop for your app’s user interface and the object that dispatches events to your views.
UIWindow는 앱의 UI와 뷰의 이벤트를 처리하는 객체의 배경입니다.
@MainActor class UIWindow : UIView
Window는 뷰컨트롤러와 함께 이벤트를 처리하고 앱 작동에 필수적인 작업들을 수행합니다. UIKit은 window와 관련된 상호작용들을 처리하고 앱 동작을 구현하는데 필요한 다른 객체와 함께 작동합니다.
window를 사용하는 경우
일반적으로 Xcode는 앱의 메인 window를 제공합니다. 새로운 iOS프로젝트에서는 스토리보드를 사용하여 앱의 view를 정의합니다. 스토리보드에는 app delegate객체에 window속성이 있어야하며 Xcode템플릿은 이를 자동으로 제공합니다. 만약 스토리보드를 쓰지 않는다면 window를 꼭 직접 생성해야 합니다.
(스토리보드를 쓰지 않는 상황은 흔하죠. 마지막줄을 꼭 기억해야겠습니다.)
대부분의 앱에서는 기기의 메인 화면에 컨텐츠를 표시할 window가 하나만 필요합니다. 기기의 메인 화면에 추가로 window를 생성할 수 있지만 일반적으로 외부 화면(external screen)에 컨텐츠를 나타내는데 추가된 창(extra window)이 사용됩니다. 다음 링크 를 참고하세요.
다음과 같은 작업들에서 UIWindow객체를 사용합니다.
window는 자체적으로 시각적으로 표현할 외형이 없습니다. 대신 window에는 root view controller에 의해 관리되는 view가 하나 이상 호스팅됩니다. 스토리보드에서 root view controller를 설정하고 원하는 view들을 추가할 수 있습니다.
UIWindow의 subclass는 거의 필요하지 않습니다. window에 구현하려는 동작의 종류는 높은 레벨의 view controller에서 좀 더 쉽게 구현될 수 있습니다. window를 subclass하고 싶은 몇안되는 경우 중 하나는 window의 key값이 변경될 때 key() 혹은 resignKey()메소드를 재정하는 것이다. 특정 화면에 window를 표시하는 방법에 대한 정보를 얻고싶다면 UIScreen를 참조하세요.
터치이벤트가 발생된 window로 전달되는 반면, 좌표가 없는 이벤트는 key window 로 전달된다. 한번에 하나의 window만 key window가 될 수 있으며 window의 isKeyWindow
속성을 사용하여 상태를 확인할 수 있습니다. 대부분의 경우 앱의 main window는 key window이지만 UIKit은 필요에 따라 다른 window를 지정할 수 있습니다.
어떤 window가 key window인지 알아야 한다면 didBecomeKeyNotification 과 didResignKeyNotification notification을 관찰(observe)하세요. 시스템에서는 앱의 key window 변경에 대한 응답으로 알림을 보냅니다.