[Apple] UIWindow

J.Noma·2022년 2월 17일
0

iOS : View : UIKit

목록 보기
16/17

Reference


🌀 UIWindow

🔸 기본역할

window는 뷰컨과 함께 작업하여, event를 처리하고 많은 App 기본동작들을 수행합니다. UIKit은 대부분의 window관련 상호작용을 처리할 수 있습니다

🔸 설정가능한 것

window에 아래와 같은 설정을 할 수 있습니다

  • z축 level 조절
    • windowLevel
    • window 간 visibility 조절 목적)
  • showing
    • 화면에 보이기
  • keyboard 이벤트의 타겟이 되기
    • makeKey
  • 좌표값 변환
    • convert(_:to:)
    • to window's / from window's
  • root 뷰컨 변경
    • rootViewController

window는 자체적으로 visual 설정을 갖고 있지 않습니다. 대신 root 뷰컨에 의해 관리되는 하나 이상의 view를 내세웁니다

🔸 스토리보드 프로젝트일 경우

스토리보드를 사용하는 프로젝트는 Xcode가 자동으로 window를 생성해줍니다. 이를 위해선 반드시 AppDelegatewindow프로퍼티를 갖고 있어야 합니다

🔸 additional Window

대부분의 App은 window를 하나만 갖지만 외부 화면에 display가 필요한 경우 추가 window를 가질 수도 있습니다 (ex. 게임 App에서 화면은 TV에, 컨트롤러는 띄우기). 이에 대해선 Displaying Content on a Connected Screen를 참고합니다

🔸 subclassing은 거의 필요하지 않습니다

subclassing은 거의 필요하지 않습니다. subclass로 구현하고자 하는 내용을 higher-level 뷰컨으로 더 쉽게 구현할 수 있기 때문입니다. 그럼에도 subclassing이 필요한 경우는 대게 becomeKey() 혹은 resignKey()를 override하여 window의 key status가 변경될 때 뭔가를 하고 싶은 경우일 것입니다

🔸 Key window

🔘 좌표값이 없는 키보드같은 이벤트는 key window가 받는다
터치 이벤트들은 터치가 발생한 window로 전달되는 반면, 키보드처럼 좌표값을 갖고 있지 않은 이벤트들은 key window로 전달됩니다. 한 번에 단 하나의 window만이 key window가 될 수 있으며 isKeyWindow 프로퍼티(read-only)로 확인할 수 있습니다. 대부분의 경우 메인 window가 key window지만 필요에 따라 UIKit이 다른 window를 지정할 수도 있습니다

🔘 key window로 설정
어느 window가 key window인지 알고 싶다면, didBecomeKeyNotificationdidResignKeyNotification 노티피케이션을 살펴봅니다. 시스템은 key window 변경에 대응하여 이 노티들을 보냅니다. 어떤 window를 강제로 key로 지정하거나 해제하려면, UIWindow가 가진 적절한 메서드를 호출하여 가능합니다

🔸 makeKeyAndVisible()

window를 key window로 만들고 isHidden을 해제합니다. UIWindow 인스턴스의 기본 상태는 key window가 아니고 hidden입니다. 보여지기 기능만 하고 싶다면 isHidden 프로퍼티만 false로 하면 됩니다

profile
노션으로 이사갑니다 https://tungsten-run-778.notion.site/Study-Archive-98e51c3793684d428070695d5722d1fe

1개의 댓글

comment-user-thumbnail
2023년 8월 1일

안녕하세요 너무 좋은 글 감사합니다.
혹시 스터디 노션에 정리하고 공유를 해도 될까요 ? 출처는 해당 링크로 밝히겠습니다.

답글 달기