为啥我看不到我的新 UIWindow?
Posted
技术标签:
【中文标题】为啥我看不到我的新 UIWindow?【英文标题】:Why do I not see my new UIWindow?为什么我看不到我的新 UIWindow? 【发布时间】:2017-05-27 18:34:42 【问题描述】:场景:创建并显示一个覆盖(辅助)UIWindow。 相关讨论: How do I toggle between UIWindows?
代码:
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>>
结果如下:没有灰色的窗口画面
重要提示:如果我在 displayOverLay() 结束时刹车并执行“po myWindow”,然后继续,我会得到显示。
所以它似乎 我错过了某种事件 让 UIWindow 出现。 需要什么来强制真正显示带有内容的新 UIWindow?
【问题讨论】:
您需要保留对窗口的引用。您需要将其声明为主控制器的属性,否则当您的方法完成运行时它将超出范围。 正确!有用。这是新的区域参考:var hamburgerWindow:UIWindow? 【参考方案1】:您需要保留对已创建窗口的引用,否则 ARC 将在您从函数返回后处理该窗口。
例如,您可以从您的函数中返回新创建的窗口,并将其存储在您从中调用该函数的类的属性中。
【讨论】:
以上是关于为啥我看不到我的新 UIWindow?的主要内容,如果未能解决你的问题,请参考以下文章