UIWindow
在我们的应用程序中,我们在 3 个不同的 s上呈现 3 个 viewController 。
我们对这些模式的安排有疑问。我试图通过调整window.windowLevel
每个UIWindow
.
由于某些未知原因,该修复适用于iOS 13.1.2
但不适用于iOS 12.1.1
. 任何想法?谢谢。
我相信windowLevel
这根本不是您要寻找的财产。即使这有效或应该有效,这也是偶然的,因为此属性描述的窗口演示样式更多的是窗口顺序。
您可以继续删除/添加窗口,甚至将它们隐藏为普通 API 的一部分。或者你可以只makeKeyAndVisible
在你想在上面看到的窗口上使用。
请参阅以下快速使用示例:
class ViewController: UIViewController {
private static var windows: [UIWindow] = {
let colors: [UIColor] = [.red, .blue, .green]
return colors.map { color in
let window: UIWindow
if #available(iOS 13.0, *) {
let scene = UIApplication.shared.windows.first!.windowScene!
window = UIWindow(windowScene: scene)
} else {
// Fallback on earlier versions
window = UIWindow(frame: UIScreen.main.bounds)
}
window.rootViewController = {
let controller = ViewController()
controller.view.backgroundColor = color
return controller
}()
window.makeKeyAndVisible()
return window
}
}()
private static var windowIndex: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onTap)))
}
@objc private func onTap() {
let actualIndex = ViewController.windowIndex%ViewController.windows.count
ViewController.windows[actualIndex].makeKeyAndVisible()
ViewController.windowIndex += 1
}
}
懒惰地加载了 3 个窗口,每个窗口都有一个具有自己独特颜色的视图控制器。当您点击屏幕时,顶部会出现一个“下一个”窗口,这样您就可以在窗口之间不断切换。
一个更安全的实现可以像下面这样简单:
@objc private func onTap() {
let actualIndex = ViewController.windowIndex%ViewController.windows.count
ViewController.windows.enumerated().forEach { index, window in
if index == actualIndex {
window.makeKeyAndVisible()
} else {
window.isHidden = true
}
}
ViewController.windowIndex += 1
}