5

我创建了一个iOS 7 密码副本,但我遇到了似乎无法解决的问题。我需要将锁屏视图置于其他所有内容之上,因此该应用程序包含在 iOS 的多任务视图中,因此我将其直接添加到keyWindow. 到目前为止一切都很好。

当我必须显示锁定屏幕时,如果有一个alertViewor actionSheet(为了简单起见,在这篇文章中只会提到s)打开,就会出现问题。alertView已经回答了好几次了,alertViewiOS 7 中没有引用 s,这是真的,并且显示它们的窗口是_UIModalItemHostingWindow,有 2 个UIViews,确实没有引用alertView.

_UIModalItemHostingWindow 也成为新的keyWindow,所以它在其他一切之上,但[UIApplication sharedApplication].windows如果我将锁定屏幕添加到我的前keyWindow一个(如果你愿意的话,默认设置keyWindow),它将在其下方alertView及其变暗的背景下,因此用户在关闭alertView. 另一个选项在下面更详细地描述。

锁屏的工作原理是这样的:applicationDidEnterBackground检查密码是否启用;如果启用并且密码持续时间为 0(用户选择立即锁定应用程序),它现在添加锁定屏幕,因此它在多任务视图中覆盖应用程序。现在,我上面提到的选项是添加alertView到此_UIModalItemHostingWindow窗口,但是当返回应用程序时,锁定屏幕视图会延迟 1 秒以上显示(即使我在进入后台之前添加了它!)和应用程序在多任务视图中没有任何内容。(目前它也显示在错误的位置,如果你继续下载它,那是固定的,但我还没有推送提交)。

我尝试隐藏和removeFromSuperviewthis _UIModalItemHostingWindow,但是当回到应用程序时,alertView动画仍然像刚刚被触发一样运行。我怀疑上面提到的延迟也是由于苹果alertViews在返回前台时的处理方式造成的。

我还尝试创建一个新窗口并使其成为新窗口keyWindow,但同样的事情发生了。

这是一个关于这个的小讨论,涵盖了我尝试过的所有东西,也许我错过了这篇文章中的一些内容。 https://github.com/rolandleth/LTHPasscodeViewController/issues/16

有任何想法吗?除了在我的应用程序中创建手动引用之外alertViewactionSheet因为我试图找到密码库的修复程序,而不是我自己的应用程序;我可以找到肮脏的解决方法,没问题:)

_UIAlertOverlayWindow更新:如果actionSheet使用 an 而不是 an ,则窗口是alertView,但据我所知,它的行为相同。

4

1 回答 1

2

最简单的解决方案是使用锁屏窗口而不是锁屏视图。

创建一个新的UIWindow,将其框架设置为UIScreen边界,在那里放置一个简单rootViewController的应该处理旋转并显示您的“锁定屏幕”视图并将其设置windowLevelUIWindowLevelAlert + 1.

然后将窗口设置hiddenYES. 当您想显示锁屏时,只需设置hiddenNO

我猜想在显示弹出框/操作表以及显示键盘时添加视图keyWindow也不起作用(键盘在键窗口顶部有自己的窗口)。

于 2013-11-07T12:29:42.450 回答