https://developer.apple.com/documentation/uikit/uiwindow
"The backdrop for your app’s user interface and the object that dispatches events to your views."
앱의 UI에 대한 배경이며, 뷰에 이벤트를 전달하는 객체입니다.
@MainActor class UIWindow : UIView
윈도우는 이벤트 처리 및 앱의 동작에 근본이 되는 다른 많은 작업 수행을 위해 뷰 컨트롤러와 함게 작동합니다. UIKit
은 많은 앱 동작을 구현하는 것이 필요한 경우에 다른 객체와 함께 동작하면서 대부분의 윈도우 관련 상호작용을 처리합니다.
아래 작업이필요할 때에만 윈도우를 사용할 수 있습니다.
Xcode는 보통 앱의 메인 윈도우를 제공합니다. 새 iOS 프로젝트는 앱의 뷰를 정의하기 위해 스토리보드를 사용합니다. 스토리보드는 Xcode 템플릿이 자동으로 제공하는 앱 딜리게이트 객체에서 윈도우 속성의 존재를 요구합니다. 앱이 스토리보드를 사용하지 않는 경우 이와 같은 윈도우를 직접 생성해야 합니다.
대부분의 앱은 기기의 메인 스크린에서 앱의 컨텐트를 표시하는 하나의 윈도우만 필요합니다. 기기의 메인 스크린에서 추가적인 윈도우를 생성할 수 있을지라도 추가적인 윈도우는 Displaying Content on a Connected Screen에서 설명하는 것처럼 외부 스크린에서 컨텐트를 표시하기 위해 사용되기도 합니다.
또한, 몇 가지 다른 작업을 위해 UIWindow
객체를 사용할 수도 있습니다.
윈도우는 스스로 어떠한 시각적 모양을 갖지 않습니다. 대신 윈도우는 윈도우의 루트 뷰 컨트롤러에 의해 관리되는 하나 혹은 하나 이상의 뷰를 호스트합니다. 인터페이스에 적합한 어떠한 뷰를 추가하면서 스토리보드에 있는 루트 뷰 컨트롤러를 설정할 수 있습니다.
UIWindow
서브클래싱은 거의 필요가 없습니다. 보통 윈도우에서 구현할 동작의 종류들은 고수준 뷰 컨트롤러에서 더 쉽게 구현될 수 있습니다. 서브클래싱이 필요한 드문 경우는 윈도우의 키 상태가 변경될 때 커스텀 동작을 구현하기 위해 becomeKey()
혹은 resignKey()
메소드를 오버라이드 하는 경우입니다. 특정 스크린에서 윈도우를 표시하는 방법에 대한 정보는 UIScreen
을 보시기 바랍니다.
UIScreen
https://developer.apple.com/documentation/uikit/uiscreen
https://velog.io/@panther222128/UIScreen
터치 이벤트는 발생 시 윈도우에 전달되는 반면에 관련 좌표값을 갖지 않는 이벤트는 키 윈도우에 전달됩니다. 한 번에 하나의 윈도우만 키 윈도우가 될 수 있으며, 윈도우의 상태를 결정하기 위해 윈도우의 isKeyWindow
속성을 사용할 수 있습니다. 대부분 앱의 메인 윈도우가 키 윈도우이지만, UIKit
은 필요한 경우 다른 윈도우를 선언할 수 있습니다.
어떤 윈도우가 키인지 알아야 할 필요가 있다면 didBecomeKeyNotification
및 didResignKeyNotification
노티피케이션을 관찰하시기 바랍니다. 시스템은 앱에서 키 윈도우 변경에 대한 응답으로 이와 같은 노티피케이션을 전달합니다. 윈도우를 키가 되도록 강제하려고 하거나 키 상태를 벗어나도록 강제하고자 한다면, 이 클래스의 적합한 메소드를 호출하시기 바랍니다.