Swift3 为什么我看不到我的新窗口?

Swift3 为什么我看不到我的新窗口?,swift3,uiwindow,Swift3,Uiwindow,场景:创建并显示覆盖(辅助)窗口。 相关讨论: 代码: fileprivate func displayOverLay() { let myWindow = {() -> UIWindow in let cWindow = UIWindow(frame: CGRect(x: 10, y: 200, width: 300, height: 300)) cWindow.backgroundColor = UIColor.gray.withAlphaC

场景:创建并显示覆盖(辅助)窗口。
相关讨论: 代码:

fileprivate func displayOverLay() {
    let myWindow = {() -> UIWindow in
        let cWindow = UIWindow(frame: CGRect(x: 10, y: 200, width: 300, height: 300))
        cWindow.backgroundColor = UIColor.gray.withAlphaComponent(0.5)
        cWindow.tag = 100
        return cWindow
    }()
    myWindow.makeKeyAndVisible()
    myWindow.windowLevel = UIWindowLevelAlert
    let storyboard = UIStoryboard(name: "Hamburger", bundle: nil)
    let vc = storyboard.instantiateInitialViewController()
    myWindow.rootViewController = vc
    return
}
以下是共享UIApplication窗口的状态:

(lldb) po UIApplication.shared.windows 
▿ 2 elements
  - 0 : <UIWindow: 0x7fcffc804860; frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x600000051280>; layer = <UIWindowLayer: 0x60000003e840>>
  - 1 : <UIWindow: 0x7fcff9407240; frame = (10 200; 300 300); tag = 100; gestureRecognizers = <NSArray: 0x608000052810>; layer = <UIWindowLayer: 0x608000220420>>


(lldb) po UIApplication.shared.keyWindow!
<UIWindow: 0x7fcff9407240; frame = (10 200; 300 300); tag = 100; gestureRecognizers = <NSArray: 0x608000052810>; layer = <UIWindowLayer: 0x608000220420>>
(lldb)po UIApplication.shared.windows
▿ 2要素
- 0 : 
- 1 : 
(lldb)po UIApplication.shared.keyWindow!
结果是:没有灰色的窗户


重要注意事项:如果我在displayOverLay()结束时刹车并执行“po myWindow”,然后继续,我将获得显示。 因此,我似乎错过了一些让UIWindow出现的事件

强制新UIWindow w/内容实际显示需要什么?

您需要保留对已创建窗口的引用,否则ARC将在您从函数返回后处理该窗口


例如,您可以从函数返回新创建的窗口,并将其存储在从中调用函数的类的属性中。

您需要保留对窗口的引用。您需要将其声明为主控制器的属性,否则当您的方法完成运行时,它将超出范围。正确!它起作用了。这是新的区域参考:var hamburgerWindow:UIWindow?