为什么我看不到我的新 UIWindow?
Why do I not see my new UIWindow?
场景: 创建并显示覆盖(辅助)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 window 状态:
(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>>
结果如下:没有灰色 window sceen
重要说明: 如果我在 displayOverLay() 结束时刹车并执行 'po myWindow',然后继续,我会得到显示。
因此,似乎 我缺少某种事件 让 UIWindow 出现。
强制 新的 UIWindow w/contents 实际显示需要什么?
您需要保留对创建的 window 的引用,否则 ARC 将在您 return 从您的函数中处理 window。
例如,您可以从您的函数 return 新创建的 window 并将其存储在您调用该函数的 class 的 属性 中。
场景: 创建并显示覆盖(辅助)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 window 状态:
(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>>
结果如下:没有灰色 window sceen
重要说明: 如果我在 displayOverLay() 结束时刹车并执行 'po myWindow',然后继续,我会得到显示。
因此,似乎 我缺少某种事件 让 UIWindow 出现。
强制 新的 UIWindow w/contents 实际显示需要什么?
您需要保留对创建的 window 的引用,否则 ARC 将在您 return 从您的函数中处理 window。
例如,您可以从您的函数 return 新创建的 window 并将其存储在您调用该函数的 class 的 属性 中。