最近我一直在想,iOS应用程序只有一个UIWindow
。创建另一个UIWindow
并将其放在屏幕上似乎不是问题。
我的问题有点模糊,但我对以下内容感兴趣:
UIWindow
实现什么?UIWindow
实例时会出现什么问题?UIWindow
来显示iPhone上的popover视图。这是一个很好的方式吗?为什么?为什么不?UIWindow
完全有意义吗?这不是我错过了什么。我从来没有觉得有必要创建另一个UIWindow
实例,但也许它会允许做我不知道的惊人事情! :-)
我希望它可以帮助我解决这个问题:我需要在当前显示的任何内容上添加“封面视图”。如果已经有一个或多个模态控制器,它也应该工作。如果我将UIView
添加到根控制器的视图中,则模态控制器位于顶部,弹出控制器也是如此。如果我以模态方式显示封面视图并且已有模态控制器,则仅覆盖屏幕的一部分。
UIWindow
可以浮动在系统键盘之类的其他UI元素之上。
要解决你的最后一段:用与主窗口相同的框架制作一个UIWindow
。将其windowLevel
酒店设为UIWindowLevelStatusBar
。将其hidden
酒店设为NO
。
从Rob的回答开始,我玩了一下,想为其他人写下一些笔记,试图获得有关这个主题的信息:
UIWindow
根本不是问题。只需创建一个和makeKeyAndVisible
。完成。UIWindow
涵盖一切,甚至模态,弹出窗口等。太棒了!UIWindow
总是含蓄的肖像。它没有旋转。您必须添加一个控制器作为新窗口的根控制器,并让它处理旋转。 (就像主窗口一样)UIWindowLevelStatusBar
以覆盖所有内容。将其hidden
酒店设为NO。UIWindow
可用于在屏幕上显示浮动在一切之上的视图。没有创建一个虚拟控制器只是为了嵌入UIPopoverController
。以下是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