Я считаю, windowLevel
- это не то, что вам нужно. Даже если это работает или должно работать, оно является случайным, так как это свойство описывает стиль представления окна более, чем порядок windows.
. Вы можете продолжать удалять / добавлять windows или даже делать их скрытыми как часть обычного 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
}
}
Lazily 3 windows загружаются каждый, имеющий контроллер представления с его собственным отличным цветом. Когда вы нажимаете на экран, сверху должно появиться «следующее» окно, чтобы вы могли продолжать переключаться между windows.
. Еще более безопасная реализация может быть такой же простой, как следующие:
@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
}