Вопрос проверяет понимание того, как UIKit определяет view, которое должно получить touch-событие.
Hit-testing — это процесс определения view, находящегося под точкой касания. UIKit рекурсивно проходит иерархию view, начиная с окна. Проверяются видимость, прозрачность и возможность взаимодействия. В результате выбирается самое вложенное view, подходящее под условия. Именно оно первым получает событие.
Hit-testing — ключевой механизм, без которого обработка касаний невозможна.
Определение:
Hit-testing — это процесс поиска наиболее подходящего UIView для обработки touch-события по координате касания.
Процесс начинается с UIWindow.
Проверяется, попадает ли точка в bounds
Проверяется isHidden == false
Проверяется alpha > 0.01
Проверяется isUserInteractionEnabled == true
Проверка рекурсивно продолжается для subviews (в обратном порядке)
Последний пункт важен: subviews проверяются сверху вниз по z-order.
hitTest и point(inside:)UIKit использует два метода:
point(inside:with:) — отвечает, принадлежит ли точка view
hitTest(_:with:) — возвращает view, которое будет обрабатывать событие
Их можно переопределять для кастомного поведения, например:
расширения зоны нажатия
проброса событий сквозь view
реализации нестандартных UI
isUserInteractionEnabled = false
alpha = 0
перекрывающее view, перехватывающее касания
неверные frame или constraints
Hit-testing — это фильтр, который определяет, кто получит касание первым. Понимание его правил помогает отлаживать проблемы с “не нажимающимися” элементами и реализовывать сложные пользовательские взаимодействия.