최근에 iOS 앱에는 UIWindow
. 다른 것을 만들어 UIWindow
화면에 배치하는 것은 문제가되지 않는 것 같습니다 .
내 질문은 모호하지만 관심이 있습니다.
UIWindow
다른 방법으로는 할 수없는 일 초로 무엇을 잠재적으로 달성 할 수 있습니까?- 여러
UIWindow
인스턴스를 사용할 때 무엇이 잘못 될 수 있습니까? - 사람들이
UIWindow
iPhone에서보기와 같은 팝 오버를 표시 하기 위해 2nd 를 사용하는 것을 보았습니다 . 이것이 좋은 방법입니까? 왜? 왜 안돼? - 다른 것을 갖는 것이 완벽하게 이해되는 다른 예가
UIWindow
있습니까?
내가 뭔가를 놓치고있는 것이 아닙니다. 다른 UIWindow
인스턴스 를 만들어야 할 필요성을 느끼지 못했지만 내가 알지 못하는 놀라운 일을 할 수 있을지도 모릅니다! 🙂
이 문제를 해결하는 데 도움이 되었으면합니다. 현재 표시된 항목 위에 “표지보기”를 추가해야합니다. 이미 하나 이상의 모달 컨트롤러가있는 경우에도 작동합니다. UIView
루트 컨트롤러의 뷰 에 a 를 추가 하면 모달 컨트롤러가 맨 위에 위치하므로 팝 오버 컨트롤러도 마찬가지입니다. 커버 뷰를 모달로 표시하고 이미 모달 컨트롤러가있는 경우 화면의 일부만 가려집니다.
답변
A UIWindow
는 시스템 키보드와 같은 다른 UI 요소 위에 떠있을 수 있습니다.
마지막 단락을 처리하려면 : UIWindow
기본 창과 동일한 프레임 으로을 만듭니다 . windowLevel
속성을로 설정 합니다 UIWindowLevelStatusBar
. hidden
속성을로 설정 합니다 NO
.
답변
Rob의 답변으로 시작하여 나는 약간 놀았고이 주제에 대한 정보를 얻으려는 다른 사람들을 위해 몇 가지 메모를 작성하고 싶습니다.
- 다른 것을 추가하는 것은 전혀 문제가되지 않습니다
UIWindow
. 하나만 만들고makeKeyAndVisible
. 끝난. - 다른 창을 표시하여 제거한 다음 더 이상 필요하지 않은 창을 놓습니다.
- “키”인 창은 모든 키보드 입력을받습니다.
UIWindow
모달, 팝 오버 등 모든 것을 다룹니다. 훌륭합니다!UIWindow
항상 암시 적으로 초상화입니다. 회전하지 않습니다. 컨트롤러를 새 창의 루트 컨트롤러로 추가하고 회전을 처리하도록해야합니다. (메인 창과 동일)- 창의 수준에 따라 표시되는 “높음”이 결정됩니다.
UIWindowLevelStatusBar
모든 것을 포함하도록 설정하십시오 .hidden
속성을 NO로 설정합니다 . - 두 번째
UIWindow
는 모든 것 위에 떠있는 화면의보기를 가져 오는 데 사용할 수 있습니다. 더미 컨트롤러를 만들지 않고UIPopoverController
. - 팝 오버 컨트롤러가 없지만 비슷한 것을 모방하려는 iPhone에서 특히 유용 할 수 있습니다.
- 그리고 네, 물론 제 문제가 해결되었습니다. 앱이 활성화를 중단하면 iOS가 앱의 현재 콘텐츠의 스크린 샷을 찍지 못하도록 현재 표시된 모든 항목 위에 커버 창을 추가합니다.
답변
UIWindow를 더 잘 이해하기위한 Apple의 설명서 는 다음과 같습니다 .
https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/WindowAndScreenGuide/WindowScreenRolesinApp/WindowScreenRolesinApp.html
UIWindow의 여러 인스턴스를 사용하는 구체적인 이유 중 하나는 앱 화면을 비디오로 녹화해야 할 때입니다. 최종 녹화 된 비디오에 특정 요소 (녹화 버튼, 녹화 상태 등)를 포함하지 않을 수 있으므로 이러한 요소를 별도의 UIWindow 위에 놓을 수 있습니다.
실제로 ReplayKit 을 사용하는 경우 제외 된 UI 요소에 대해 별도의 UIWindow 를 사용해야합니다. 자세한 정보 : https://medium.com/ar-tips-and-tricks/how-to-record-a-screen-capture-with-replaykit-whilst-hiding-the-hud-element-bedcca8e31e