优点,问题,将另一个UIWindow添加到iOS应用程序的示例?

问题描述 投票:83回答:3

最近我一直在想,iOS应用程序只有一个UIWindow。创建另一个UIWindow并将其放在屏幕上似乎不是问题。

我的问题有点模糊,但我对以下内容感兴趣:

  • 我可以通过其他方式无法完成的第二个UIWindow实现什么?
  • 使用多个UIWindow实例时会出现什么问题?
  • 我看到人们使用第二个UIWindow来显示iPhone上的popover视图。这是一个很好的方式吗?为什么?为什么不?
  • 还有其他例子,让另一个UIWindow完全有意义吗?

这不是我错过了什么。我从来没有觉得有必要创建另一个UIWindow实例,但也许它会允许做我不知道的惊人事情! :-)

我希望它可以帮助我解决这个问题:我需要在当前显示的任何内容上添加“封面视图”。如果已经有一个或多个模态控制器,它也应该工作。如果我将UIView添加到根控制器的视图中,则模态控制器位于顶部,弹出控制器也是如此。如果我以模态方式显示封面视图并且已有模态控制器,则仅覆盖屏幕的一部分。

objective-c cocoa-touch uikit uiwindow
3个回答
22
投票

UIWindow可以浮动在系统键盘之类的其他UI元素之上。

要解决你的最后一段:用与主窗口相同的框架制作一个UIWindow。将其windowLevel酒店设为UIWindowLevelStatusBar。将其hidden酒店设为NO


103
投票

从Rob的回答开始,我玩了一下,想为其他人写下一些笔记,试图获得有关这个主题的信息:

  • 添加另一个UIWindow根本不是问题。只需创建一个和makeKeyAndVisible。完成。
  • 通过显示另一个窗口将其删除,然后释放您不再需要的窗口。
  • “key”窗口接收所有键盘输入。
  • UIWindow涵盖一切,甚至模态,弹出窗口等。太棒了!
  • UIWindow总是含蓄的肖像。它没有旋转。您必须添加一个控制器作为新窗口的根控制器,并让它处理旋转。 (就像主窗口一样)
  • 窗口的级别决定了它显示的“高”程度。将它设置为UIWindowLevelStatusBar以覆盖所有内容。将其hidden酒店设为NO。
  • 第二个UIWindow可用于在屏幕上显示浮动在一切之上的视图。没有创建一个虚拟控制器只是为了嵌入UIPopoverController
  • 它在没有popover控制器的iPhone上特别有用,但你可能想要模仿类似的东西。
  • 是的,它解决了当然我的问题:如果应用程序重新启动激活,请在当前显示的任何内容上添加封面窗口,以防止iOS截取您应用当前内容的屏幕截图。

0
投票

以下是Apple的文档,以便更好地理解UIWindow: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

© www.soinside.com 2019 - 2024. All rights reserved.