Objective c 向iOS应用程序添加另一个UIWindow的优点、问题和示例?

Objective c 向iOS应用程序添加另一个UIWindow的优点、问题和示例?,objective-c,cocoa-touch,uikit,uiwindow,Objective C,Cocoa Touch,Uikit,Uiwindow,最近我一直在想,iOS应用程序只有一个UIWindow。 创建另一个ui窗口并将其放置在屏幕上似乎不是问题 我的问题有点模糊,但我感兴趣的是: 使用第二个ui窗口可以实现哪些其他方式无法实现的潜在功能 使用多个UIWindow实例时会出现什么问题 我看到人们使用第二个ui窗口在iPhone上显示类似popover的视图。这是一个好的方法吗?为什么?为什么不呢 有没有其他例子可以说明,使用另一个ui窗口 并不是我错过了什么。我从来没有觉得有必要创建另一个UIWindow实例,但也许它可以让我做

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

我的问题有点模糊,但我感兴趣的是:

  • 使用第二个
    ui窗口
    可以实现哪些其他方式无法实现的潜在功能
  • 使用多个
    UIWindow
    实例时会出现什么问题
  • 我看到人们使用第二个
    ui窗口
    在iPhone上显示类似popover的视图。这是一个好的方法吗?为什么?为什么不呢
  • 有没有其他例子可以说明,使用另一个
    ui窗口
并不是我错过了什么。我从来没有觉得有必要创建另一个
UIWindow
实例,但也许它可以让我做一些我不知道的惊人的事情!:-)

我希望它能帮助我解决这个问题: 我需要在当前显示的内容上添加“封面视图”。如果已经提供了一个或多个模态控制器,那么它也应该起作用。如果我将
UIView
添加到根控制器的视图中,模态控制器位于顶部,popover控制器也位于顶部。
如果我以模式显示cover视图,并且已经有一个模式控制器,那么只有部分屏幕被覆盖。

a
UI窗口可以浮动在其他UI元素(如系统键盘)之上


要处理最后一段:使用与主窗口相同的框架制作一个
ui窗口。将其
windowLevel
属性设置为
UIWindowLevelStatusBar
。将其
hidden
属性设置为
NO

从Rob的答案开始,我仔细研究了一下,想为其他试图获取此主题信息的人写下一些注释:

  • 添加另一个
    UIWindow
    根本不是问题。只需创建一个,然后
    makeKeyAndVisible
    。完成了
  • 通过使另一个窗口可见来移除它,然后释放你不再需要的窗口
  • “键”窗口接收所有键盘输入
  • ui窗口
    涵盖所有内容,甚至包括情态动词、流行音乐等等。太棒了
  • ui窗口
    始终隐式显示。它不旋转。您必须添加一个控制器作为新窗口的根控制器,并让它处理旋转。(就像主窗口一样)
  • 窗口的级别决定其显示的“高度”。将其设置为
    UIWindowLevelStatusBar
    以覆盖所有内容。将其
    hidden
    属性设置为NO
  • 第二个
    ui窗口
    可用于在屏幕上显示浮动在所有内容之上的视图。无需创建虚拟控制器,只需将其嵌入
    UIPopoverController
  • 它在iPhone上特别有用,因为iPhone上没有popover控制器,但你可能想模仿类似的东西
  • 是的,它当然解决了我的问题:如果应用程序退出激活,在当前显示的内容上添加一个覆盖窗口,以防止iOS截取应用程序当前内容的屏幕截图

    • 以下是苹果公司的文档,以便更好地理解UIWindow:

      使用多个UIWindow实例的一个很好但具体的原因是当您需要对应用程序屏幕进行视频录制时。您可能不希望在最终录制的视频中包含某些元素(录制按钮、录制状态等),因此可以将这些元素放在顶部的单独窗口中


      事实上,如果您使用的是ReplayKit,则必须为这些被排除的UI元素使用单独的UIWindow。更多信息请点击此处:

      呃,好的。谢谢我知道。你能详细解释一下我的问题吗?您知道如何删除由makeKeyAndVisible添加的秒UIWindow吗?请将第二个UIWindow的hidden属性设置为YES。谢谢。我通过设置窗口的关键点并使其可见来显示窗口?我通过让另一个窗口可见并处理另一个窗口来隐藏它?我怎样才能像UIActionSheet那样设置UIWindow的动画呢?注意这个。如果在!=UIWindowLevelNormal,键盘将在