Вопрос проверяет понимание архитектуры UIKit и того, с какой точки начинается обработка пользовательских событий.
UIWindow — это корневая точка обработки событий в UIKit. Все touch-события сначала попадают в окно, и уже оно запускает процесс hit-testing. Окно связывает систему событий с иерархией view и responder chain. Без понимания роли UIWindow сложно корректно работать с кастомными окнами, оверлеями и жестами.
UIWindow — это объект, который соединяет низкоуровневые события системы с иерархией view приложения. Он существует выше всех UIViewController и UIView.
UIWindow — корневая view, которая получает события от системы и распределяет их по иерархии интерфейса.
Обработка событий начинается именно с окна:
iOS получает touch от системы
событие передаётся активному UIWindow
UIWindow запускает hit-testing
находится подходящая UIView
событие попадает в responder chain
Важно:
без активного окна события не обрабатываются
именно окно знает, какой контроллер сейчас “главный”
UIWindow:
переводит координаты касания в свою систему
вызывает hitTest(_:with:) у root view
управляет тем, какая ветка иерархии будет проверяться
Если в приложении несколько окон:
события получает key window
остальные окна игнорируются
Роль UIWindow особенно заметна, когда:
используется кастомное окно для оверлеев
реализуются floating UI (debug panels, chat heads)
показываются системоподобные экраны поверх всего UI
Считать, что UIViewController — начальная точка событий. На самом деле контроллеры вообще не участвуют в hit-testing напрямую — они включаются позже через responder chain.
UIWindow — это входная точка всех пользовательских событий. Оно запускает hit-testing и связывает систему событий с иерархией view и responder chain.