Вопрос проверяет понимание механизма обработки touch-событий и базовой архитектуры UIKit.
UIKit начинает поиск с UIWindow и спускается вниз по иерархии view. Для каждой view вызывается hitTest(_:with:), которая проверяет, попадает ли касание внутрь и может ли view его обработать. Поиск идёт от верхних view к нижним, пока не найдётся подходящая. Найденная view становится получателем touch-события.
Обработка touch-событий в UIKit построена на чётком алгоритме поиска view, которая должна стать получателем события.
Когда пользователь касается экрана, UIKit:
получает координату касания
передаёт её UIWindow
начинает поиск подходящей view
Этот процесс называется hit-testing.
Поиск выполняется в следующем порядке:
UIWindow
начальная точка поиска
переводит координаты в систему view
Root view
UIWindow передаёт событие корневой view контроллера
Иерархия сабвью
перебор идёт от:
верхних (frontmost)
к нижним (backmost)
учитывается порядок добавления сабвью
View не участвует в hit-testing, если:
isHidden == true
alpha < 0.01
isUserInteractionEnabled == false
Такие view автоматически пропускаются.
UIKit вызывает hitTest(_:with:):
если точка попадает внутрь (point(inside:with:) == true)
и view может принимать события
то она либо возвращает себя, либо продолжает поиск среди сабвью.
UIKit ищет обработчик touch-события сверху вниз по иерархии view, начиная с UIWindow. Побеждает самая верхняя view, подходящая по условиям hit-testing.