AppDelegate 혹은 SceneDelegate에서 프로퍼티로 설정되어 있는 것을 볼 수 있는 window 프로퍼티의 타입은 UIWindow이다. 해당 프로퍼티가 언제 쓰이며, 어떤 역할을 수행하는지 알아보자!
class
The backdrop for your app’s user interface and the object that dispatches events to your views.
UIWindow는 App UI에 대한 배경과 Event를 다른 View들에게 발송하는 객체이다.
@MainActor class UIWindow: UIView
window는 뷰컨트롤러와 함께 이벤트를 처리하고 앱 작동에 필수적인 작업들을 수행합니다. UIKit은 window와 관련된 상호작용들을다루며, 앱의 동작을 수행하는데 필요한 객체들과 함께 작동합니다.
windows는 아래와 같은 경우에 사용됩니다.
보통 Xcode는 앱의 main window를 제공한다. 새로운 iOS 프로젝트에서는 앱의 view들을 정의하기 위해서 스토리보드를 사용한다. 스토리보드들은 AppDelegate에서 window 프로퍼티의 존재를 요구한다. Xcode에서는 자동적으로 이것을 제공한다. 만약에 스토리보드를 사용하지 않고 프로젝트를 진행한다면, window 객체를 직접 생성해야 합니다.
대부분의 앱에서는 기기의 메인 화면에 컨텐츠를 표시할 window가 하나만 필요하다. 기기의 메인 화면에 추가로 window를 생성할 수 있지만 일반적으로 외부 화면에 컨텐츠를 나타내는데 추가된 창이 사용된다. 해당 내용은 Displaying Content on a Connected Screen에서 확인할 수 있다.
UIWindow 객체를 다음 아래 작업들에서 사용합니다.
window는 자체적으로 시각적인 외형을 가지고 있지 않다. 대신에, window는 하나 이상의 view를 호스트 하며, 그 view들은 window의 rootViewController에 의해서 관리됩니다. 스토리보드에서 rootViewController를 설정하고, 인터페이스에 적절하게 view들을 추가하세요.
UIWindow Subclass는 거의 필요하지 않습니다. window에서 구현할 수 있는 동작의 종류는 일반적으로 상위 수준 ViewController에서 더 쉽게 구현할 수 있습니다. Window의 key 상태가 변경될 때 사용자 지정 동작을 구현하기 위해 becomeKey()
혹은 resignKey()
메소드를 재정의하는 것이 window의 subclass를 원하는 수 많은 이유 중 하나일 것이다. 특정 화면에 Window를 표시하는 방법에 대한 자세한 내용은 UIScreen
을 참고하세요.
터치 이벤트가 발생한다면, 터치 이벤트가 발생된 window로 잘 전달되지만, 좌표가 없는 이벤트는 key window로 전달된다. 한번에 하나의 window만 key window가 될 수 있으며 window iskeyWindows
프로퍼티를 사용하여 상태를 확인할 수 있습니다. 대부분의 경우 앱의 main window는 key window이지만 UIKit은 필요에 따라 다른 window를 지정할 수 있습니다.
어떤 window가 key window인지를 알아내려면 didBecomeKeyNotificaiton
과 didResignKeyNotification
notificaiton을 관찰하세요. 시스템에서는 앱의 key window 변경에 대한 알림을 보낼 것입니다.
isKeyWindow
프로퍼티를 통해서 확인해라.한 줄 요약
UIWindow 의 역할은 UIKit 에서 이벤트를 수신하고, 관련된 이벤트를 루트 뷰 컨트롤러 및 관련 뷰에 전달하는 것입니다.