Reference
- UIWidow : UIWidow
window는 뷰컨과 함께 작업하여, event를 처리하고 많은 App 기본동작들을 수행합니다. UIKit은 대부분의 window관련 상호작용을 처리할 수 있습니다
window에 아래와 같은 설정을 할 수 있습니다
windowLevel
makeKey
등convert(_:to:)
등rootViewController
window는 자체적으로 visual 설정을 갖고 있지 않습니다. 대신 root 뷰컨에 의해 관리되는 하나 이상의 view를 내세웁니다
스토리보드를 사용하는 프로젝트는 Xcode가 자동으로 window를 생성해줍니다. 이를 위해선 반드시 AppDelegate
이 window
프로퍼티를 갖고 있어야 합니다
대부분의 App은 window를 하나만 갖지만 외부 화면에 display가 필요한 경우 추가 window를 가질 수도 있습니다 (ex. 게임 App에서 화면은 TV에, 컨트롤러는 띄우기). 이에 대해선 Displaying Content on a Connected Screen를 참고합니다
subclassing은 거의 필요하지 않습니다. subclass로 구현하고자 하는 내용을 higher-level 뷰컨으로 더 쉽게 구현할 수 있기 때문입니다. 그럼에도 subclassing이 필요한 경우는 대게 becomeKey()
혹은 resignKey()
를 override하여 window의 key status가 변경될 때 뭔가를 하고 싶은 경우일 것입니다
🔘 좌표값이 없는 키보드같은 이벤트는 key window가 받는다
터치 이벤트들은 터치가 발생한 window로 전달되는 반면, 키보드처럼 좌표값을 갖고 있지 않은 이벤트들은 key window
로 전달됩니다. 한 번에 단 하나의 window만이 key window가 될 수 있으며 isKeyWindow
프로퍼티(read-only)로 확인할 수 있습니다. 대부분의 경우 메인 window가 key window지만 필요에 따라 UIKit이 다른 window를 지정할 수도 있습니다
🔘 key window로 설정
어느 window가 key window인지 알고 싶다면, didBecomeKeyNotification
과 didResignKeyNotification
노티피케이션을 살펴봅니다. 시스템은 key window 변경에 대응하여 이 노티들을 보냅니다. 어떤 window를 강제로 key로 지정하거나 해제하려면, UIWindow가 가진 적절한 메서드를 호출하여 가능합니다
window를 key window로 만들고 isHidden을 해제합니다. UIWindow 인스턴스의 기본 상태는 key window가 아니고 hidden입니다. 보여지기 기능만 하고 싶다면 isHidden
프로퍼티만 false로 하면 됩니다
안녕하세요 너무 좋은 글 감사합니다.
혹시 스터디 노션에 정리하고 공유를 해도 될까요 ? 출처는 해당 링크로 밝히겠습니다.