[objective-c] iOS 앱에 다른 UIWindow를 추가하는 장점, 문제점, 예?

최근에 iOS 앱에는 UIWindow. 다른 것을 만들어 UIWindow화면에 배치하는 것은 문제가되지 않는 것 같습니다 .

내 질문은 모호하지만 관심이 있습니다.

  • UIWindow다른 방법으로는 할 수없는 일 초로 무엇을 잠재적으로 달성 할 수 있습니까?
  • 여러 UIWindow인스턴스를 사용할 때 무엇이 ​​잘못 될 수 있습니까?
  • 사람들이 UIWindowiPhone에서보기와 같은 팝 오버를 표시 하기 위해 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


답변