티스토리 뷰

Swift&IOS

UIWindow

밀쿄 2020. 1. 13. 11:00

안녕하세요. 밀쿄 입니다.

오늘은 우리가 무심코 지나치게 되는 UIWindow에 대해서 알아보겠습니다.

저는 코드로 화면을 짜기 때문에 사실 새 프로젝트 파일을 만들 때마다

UIWinodw를 생성해서 사용하는데 매번 지나치고 가는 것 같아서 이 기회에 정리해보고자합니다,

 

기본적으로 UIWindow는 뷰나 객체들에게 이벤트를 전달하는 역할을 합니다.

다시말해서 View Controller와 함께 이벤트를 처리하고 앱 운영에 필수적인 다른 많은 작업을 수행하게 되는녀석입니다.'

이러한 UIWIndow는 기본적으로 제공해줍니다. 단, 스토리보드를 사용할 때만 말이죠

참고로 이 때 AppDelegate나 SceneDelegate에 UIWindow타입의 프로퍼티가 존재해야합니다,

그래서 우리가 AppDelegate나 SceneDelegate에서 다음과 같은 코드를 본 적 있을껍니다.

var window: UIWindow?

그리고 더불어서 특별히 UIWindow를 상속받아서 생성할 일도 없다고 합니다.

하지만 외부화면에 내용을 표시하기위해서 UIWIndow를 생성해서 사용하기도 한다고 하네요.

그렇다면 이러한 경우말고 UIWIndow는 언제 사용될까요? ( 번역 주의 해주세요. )

window의 z 축 레벨을 설정하여 다른 window의 상대적인 가시성에 영향을 줄 때

(Setting the z-axis level of your window, which affects the visibility of the window relative to other windows.)

windows 표시 및 키보드 이벤트 대상으로 설정

(Showing windows and making them the target of keyboard events.)

좌표 값을 window's의 좌표계로 변환
(Converting coordinate values to and from the window’s coordinate system.)

rootViewController 변경
(Changing the root view controller of a window.)

window가 표시되는 screen변경
(Changing the screen on which the window is displayed.)

정도에 쓰인다고 하네요.

 

이쯤하면 의문이 들껍니다.

그럼 이렇게 중요한 window를 스토리보드가 없을 때 수동으로 생성하는 방법이 무엇일까하고 말이죠

먼저 SceneDelegate가 없을 때 하는 방법을 알려드리겠습니다.

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        let window = UIWindow(frame: UIScreen.main.bounds)
        self.window = window
        
        return true
    }

SceneDelegate가 있을 때는 어떻게 생성할까요?

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        let window = UIWindow(windowScene: windowScene)
        self.window = window
    }

참고로  단순히 window를 생성하는 법을 보여드리기 위해 따로 rootViewController를 지정해주진 않았지만

 UIWindow는 뷰를 담는 컨테이너 같은 역할이므로 roootViewController를 무조건 지정해주셔야합니다. 

 

출처

https://developer.apple.com/documentation/uikit/uiwindow

 

UIWindow - UIKit | Apple Developer Documentation

The display manager that handles requests for screen resolution, refresh rate, and HDR mode information.

developer.apple.com

 

'Swift&IOS' 카테고리의 다른 글

[Tip] 코드로 화면 짤 때 조금 더 편하게 짜는 법  (0) 2020.04.20
[MVC to MVVM 01] 일단 MVC부터..  (0) 2020.04.09
flatMap, compactMap  (0) 2020.01.10
rethrows  (0) 2020.01.09
StackView + ScrollView  (0) 2020.01.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함