UIWindow
공식 문서
UIWindow The backdrop for your app's user interface and object that dispatches events to your views
Declaration
@MainActor class UIWindow: UIView
- Overview Windows work with your view controllers to handler events and to perform many other tasks that are funtdamental to your app's operation. UIKit handles most window-related interactions, working with other objects as needed to implement many app behaviors
You use windows only when you need to do the following:
- Provide a main window to display your app's content
- Create additional windows (as needed) to display additional content
Storyboards require the presence of a window property on the app delegate object, which the Xcode templates automatically provide. If your app doesn't use storyboards, you must create the window yourself.
- This is why we make a connection between window and ViewController on the SceneDelegate
You also use UIWindow objects for a handful of other tasks:
- Setting the z-axis level of your window, which affects the visibility of the window relative to other windows
- Showing windows and making them the target of keyboard events
- Converting coordinate values to and from the window's coordinate system
- Changing the root view controller of a window
- Changing the screen on which the window is displayed
Windows don't have any visual appearance of their own. instead, a window hosts one or more views, which are managed by the window's root view controller.
한글 자료
요약 윈도우는 뷰들을 담는 컨테이너이며, 이벤트를 전달해주는 매개체이다. iOS 앱은 콘텐츠를 화면에 보여주기 위해 최소 1개 이상의 윈도우를 가지고 있다. 시스템 윈도우에서 생성된 이벤트들은 Key Window로 전달된다.
내용 UIWindow도 UIView를 상속하고 있다.
open class UIWIndow: UIView
UIView는 UIResponder를 상속하고 있다.
open class UIView : UIResponder
이벤트를 처리하는 리스폰더 체인(Responder Chain)에는 UIWindow가 항상 포함된다. 이 부분에서 '뷰에 이벤트를 전달하는'이라는 역할이 수행되는 것이다.
@MainActor라는 어트리뷰트는 Swift 5.5부터 도입되는 개념으로, 메인 쓰레드에서 실행되는 클래스임을 가르킨다. UIWindow는 뷰들 가장 뒤에서 배경막 역할을 하고 있다.
정리
- UIWindow는 이벤트 처리 및 User Interface를 담당하는 배경막 역할을 하는 객체이다
- UIWindow는 UIView를 상속하고 있지만, 직접 뷰를 보여주는 역할을 하지는 않는다. 대신 Root ViewController를 설정하여 컨텐츠를 보여준다
- iOS앱은 최소한 1개 이상의 윈도우를 가지고 있어야 한다
- Xcode에서 storyboard를 사용하면 Xcode가 자동으로 window를 연결시켜준다
- iOS 13 미만에서는 AppDelegate에서 window 연결을 하고, iOS 13부터는 SceneDelegate에서 window연걸을 한다