Post

Uiwindow란

1. 개요

UIWindowUIView의 서브클래스 iOS 앱 화면 출력의 최상단 컨테이너 일반적으로 앱당 하나의 UIWindow 사용 보통 AppDelegateSceneDelegate에서 생성 및 설정


2. 주요 역할

뷰 계층의 루트 역할 이벤트 전달의 시작점 (터치, 키보드 등) 상태 변화에 따른 UI 표시 (예: 키보드, 상태 표시줄 등 포함 가능)


3. 자주 사용하는 속성

rootViewController:

  • 윈도우에서 가장 처음 표시할 뷰 컨트롤러, 이 컨트롤러의 뷰가 전체 UI 계층의 시작점 isHidden:
  • true면 윈도우가 숨겨져 화면에 보이지 않음 windowLevel:
  • UIWindow의 표시 우선순위 기본값: .normal
  • .statusBar, .alert, .custom(...) 등의 값으로 설정 가능


4. 생성 및 설정 예시 (SceneDelegate 기준)

1
2
3
4
5
6
7
8
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }

    let window = UIWindow(windowScene: windowScene)
    window.rootViewController = MyRootViewController()
    window.makeKeyAndVisible()
    self.window = window
}


5. UIWindowLevel 종류

  • 레벨 설명
    • .normal 기본 레벨. 앱 UI용
    • .alert 경고창 같은 긴급 UI 표시용
    • .statusBar 상태 표시줄 위에 표시됨 (현재는 사용 권장되지 않음)


6. 실무에서의 활용 예

  • 키오스크 모드: 여러 개의 UIWindow를 구성해 잠금 영역/메인 영역 분리
  • 커스텀 토스트/오버레이: windowLevel을 조절해 앱 UI 위에 표시
  • 디버깅용 HUD(Heads Up Display) 구성


7. 주의사항

  • 여러 UIWindow를 쓸 수 있지만 관리 복잡도가 높아짐
  • 일반 앱에서는 SceneDelegate가 생성해주는 기본 UIWindow 하나만 써도 충분
  • iOS 13부터 멀티 윈도우(멀티 씬) 지원 → UIWindowScene 연동 필요
This post is licensed under CC BY 4.0 by the author.