iOS 앱에 다른 UIWindow를 추가하는 장점, 문제점, 예?


92

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

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

  • UIWindow다른 방법으로는 할 수없는 일 초로 무엇을 잠재적으로 달성 할 수 있습니까?
  • 여러 UIWindow인스턴스를 사용할 때 무엇이 ​​잘못 될 수 있습니까?
  • 사람들이 UIWindowiPhone에서보기와 같은 팝 오버를 표시 하기 위해 2nd 를 사용하는 것을 보았습니다 . 이것이 좋은 방법입니까? 왜? 왜 안돼?
  • 다른 것을 갖는 것이 완벽하게 이해되는 다른 예가 UIWindow있습니까?

내가 뭔가를 놓치고있는 것이 아닙니다. 다른 UIWindow인스턴스 를 만들어야 할 필요성을 느끼지 못했지만 내가 알지 못하는 놀라운 일을 할 수 있을지도 모릅니다! :-)

이 문제를 해결하는 데 도움이 되었으면합니다. 현재 표시된 항목 위에 "표지보기"를 추가해야합니다. 이미 하나 이상의 모달 컨트롤러가있는 경우에도 작동합니다. UIView루트 컨트롤러의 뷰 에 a 를 추가 하면 모달 컨트롤러가 맨 위에 위치하므로 팝 오버 컨트롤러도 마찬가지입니다. 커버 뷰를 모달로 표시하고 이미 모달 컨트롤러가있는 경우 화면의 일부만 가려집니다.


아이폰 OS 응용 프로그램에서 여러 UIWindows를 사용 shaune.com.au/using-multiple-uiwindows-in-ios-applications
onmyway133

답변:


27

A UIWindow는 시스템 키보드와 같은 다른 UI 요소 위에 떠있을 수 있습니다.

마지막 단락을 처리하려면 : UIWindow기본 창과 동일한 프레임 으로을 만듭니다 . windowLevel속성을로 설정 합니다 UIWindowLevelStatusBar. hidden속성을로 설정 합니다 NO.


어, 알았어. 감사. 나는 그것을 알고 있었다. 내 질문에 대해 자세히 설명해 주시겠습니까? makeKeyAndVisible에 의해 추가 된 초 UIWindow의 RID를 얻는 방법을 알고 있습니까?
Krumelur 2011

두 번째 UIWindow의 숨겨진 속성을 YES로 설정합니다.
rob mayoff

감사. 그리고 나는 그것을 키와 보이게하여 창을 표시합니까? 그리고 다른 창을 표시하고 다른 창을 처리하여 숨 깁니다. UIActionSheet처럼 UIWindow에 애니메이션을 적용하려면 어떻게해야합니까?
Krumelur 2011

이것에 조심하십시오. ! = UIWindowLevelNormal이면 키보드가 <iOS7에서 그 아래에 표시됩니다.
Shawn

108

Rob의 답변으로 시작하여 나는 약간 놀았고이 주제에 대한 정보를 얻으려는 다른 사람들을 위해 몇 가지 메모를 작성하고 싶습니다.

  • 다른 것을 추가하는 것은 전혀 문제가되지 않습니다 UIWindow. 하나만 만들고 makeKeyAndVisible. 끝난.
  • 다른 창을 표시하여 제거한 다음 더 이상 필요하지 않은 창을 놓습니다.
  • "키"인 창은 모든 키보드 입력을받습니다.
  • UIWindow 모달, 팝 오버 등 모든 것을 다룹니다. 훌륭합니다!
  • UIWindow항상 암시 적으로 초상화입니다. 회전하지 않습니다. 컨트롤러를 새 창의 루트 컨트롤러로 추가하고 회전을 처리하도록해야합니다. (메인 창과 동일)
  • 창의 수준에 따라 표시되는 "높음"이 결정됩니다. UIWindowLevelStatusBar모든 것을 포함하도록 설정하십시오 . hidden속성을 NO로 설정합니다 .
  • 두 번째 UIWindow는 모든 것 위에 떠있는 화면의보기를 가져 오는 데 사용할 수 있습니다. 더미 컨트롤러를 만들지 않고 UIPopoverController.
  • 팝 오버 컨트롤러가 없지만 비슷한 것을 모방하려는 iPhone에서 특히 유용 할 수 있습니다.
  • 그리고 네, 물론 제 문제가 해결되었습니다. 앱이 활성화를 중단하면 iOS가 앱의 현재 콘텐츠의 스크린 샷을 찍지 못하도록 현재 표시된 모든 항목 위에 커버 창을 추가합니다.

답변이 아니라면 다른 UIWindow를 사용할 용기가 없었을 것입니다. 두 번째 UIWindow가 자체적으로 자동 회전하지 않기 때문에 이것은 또한 매우 유용했습니다.
Dan Abramov 2012 년

1
매우 계몽적인 포스트. 그러나이 창을 사임하고 기본 창 키를 표시하고이 기본 창의 rootViewController에 현재 모달 컨트롤러가 있으면 어떻게됩니까? 모달 뷰 컨트롤러가 다시 표시됩니까? 무엇 우리의 응용 프로그램에서 발생하는 ... rootViewController하지 모달 하나를 제시한다는 것입니다
나바 Carmon

@Krumelur 이것은 괜찮습니다. 의심 스럽다. 즉, 두 번째 UIWindow가 현재 모든 뷰 위에 표시됩니다. 사용자가 하나 이상의 viewcontroller를 표시하는 첫 번째 UIWindow에있는 뷰에서 하나의 버튼을 클릭 할 때. 이 두 번째 UIWindow는 숨길 것입니다. 이 UIWindow가 전체 앱에 항상 표시되도록 만드는 방법.
Easwaramoorthy K

1
사용자 지정 스타일 경고보기와 아이폰 팝 오버를 구현하기 위해 항상 UIWindow를 사용합니다. 항상 전체 화면보기를 포함하고 내부에 또 다른 "콘텐츠"보기를 포함하여보기를 전체 화면으로 만드는 데 도움이되므로 외부보기가 터치 이벤트를 포착 할 수 있습니다 (그래서 멋진 그림자를 추가하고 다른 콘텐츠를 어둡게 할 수 있습니다 ^^)
Martin Ullrich

3
두 번째 창은 가시성을 위해 유지되는 것이 아닙니다 (일반 뷰가 수퍼 뷰에 의해 유지되는 것과는 대조적으로).
Rivera

0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.