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

Kru*_*lur 86 cocoa-touch objective-c uikit uiwindow

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

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

  • UIWindow可以通过其他方式无法实现的第二种方式实现什么?
  • 使用多个UIWindow实例时会出现什么问题?
  • 我已经看到人们使用第二个UIWindow来显示iPhone上的popover视图.这是一个很好的方式吗?为什么?为什么不?
  • 是否有其他例子让另一个人有充分理由UIWindow

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

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

Kru*_*lur 105

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

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

  • 应该注意的是,第二个窗口不仅仅是为了可见而保留(与其超级视图保留的常规视图相反). (3认同)

rob*_*off 24

A UIWindow可以浮动在其他UI元素之上,如系统键盘.

要解决您的最后一段:使用UIWindow与主窗口相同的框架制作一个.将其windowLevel属性设置为UIWindowLevelStatusBar.将其hidden属性设置为NO.