Как работает хит-тест (hitTest) для определения нажатия на кнопку?
Как работает Responder Chain и метод hitTest?
Чем hitTest(_:with:) отличается от point(inside:with:)?
Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
Рейтинг:
2
Сложность:
5
При касании iOS вызывает hitTest(_:with:) у корневой вью, которая рекурсивно спускается по иерархии: проверяет point(inside:) для каждого сабвью в обратном порядке z-оси. Первый вью, чей point(inside:) возвращает true, получает событие. Таким образом определяется конечная цель касания.
Рейтинг:
2
Сложность:
6
Когда пользователь касается экрана, UIKit вызывает у корневой UIWindow метод hitTest(_:with:), который рекурсивно спускается по сабвью, вызывая для каждой point(inside:with:). Первый вью, где точка находится внутри, возвращается как целевая, и далее событие проходит по цепочке Responder Chain: от вью к её контроллеру, затем к суперреспондам (nextResponder), пока не будет обработано.
Рейтинг:
5
Сложность:
8
point(inside:with:) отвечает только на вопрос, попадает ли точка внутрь view. hitTest(_:with:) определяет, какая именно view должна обработать событие. Первый метод — это фильтр, второй — механизм поиска. Их часто переопределяют вместе, но назначение у них принципиально разное.