Подкласс UIWindow
и переопределение addSubview()
, чтобы убедиться, что ваш оверлейный вид всегда сверху:
weak var overlay: MyOverlayView!
override func addSubview(_ view: UIView) {
if let overlay = view as? MyOverlayView {
self.overlay = overlay
super.addSubview(overlay)
} else {
self.insertSubview(view, belowSubview: overlay)
}
}
Вы должны убедиться, что делегат приложения использует ваш пользовательский класс в качестве главного окна приложения, а не суперкласс UIWindow
. Для этого удалите запись «Основное имя файла раскадровки» из своего Info.plist и вместо этого вручную создайте главное окно в AppDelegate:
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: MyCustomWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
self.window = MyCustomWindow(frame: UIScreen.main.bounds)
// 1. Add your overlay view to the window
// (...)
// 2. Load your initial view controller from storyboard, or
// instantiate it programmatically
// (...)
window?.makeKeyAndVisible()
return true
}
Примечание. Я не проверял этот код. Дайте мне знать в комментариях, если есть проблема.