Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про IOS: hittest, pointinside

Чем hitTest(_:with:) отличается от point(inside:with:)?

Вопрос проверяет глубокое понимание механизма hit-testing и умение кастомизировать обработку касаний.

Короткий ответ

point(inside:with:) отвечает только на вопрос, попадает ли точка внутрь view. hitTest(_:with:) определяет, какая именно view должна обработать событие. Первый метод — это фильтр, второй — механизм поиска. Их часто переопределяют вместе, но назначение у них принципиально разное.

Длинный ответ

Эти два метода тесно связаны, но выполняют разные роли в процессе hit-testing. Понимание их различий — ключ к корректной обработке сложных касаний.

Определение

  • point(inside:with:) — проверяет, находится ли точка внутри view

  • hitTest(_:with:) — возвращает view, которая должна обработать событие

point(inside:with:)

Этот метод:

  • получает точку в координатах view

  • возвращает true или false

  • не выбирает обработчика

Используется как фильтр:

  • если false, view и её сабвью игнорируются

Типовой пример:

override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
    return bounds.insetBy(dx: -20, dy: -20).contains(point)
}

hitTest(_:with:)

Этот метод:

  • запускает поиск обработчика

  • вызывает point(inside:with:)

  • рекурсивно проверяет сабвью

  • возвращает конкретную UIView

Упрощённая логика:

  1. Проверить, можно ли обрабатывать события

  2. Проверить попадание точки

  3. Проверить сабвью (сверху вниз)

  4. Вернуть найденную view или себя

Ключевое различие по смыслу

  • point(inside:) → можно ли вообще взаимодействовать

  • hitTest → кто именно будет взаимодействовать

Типичные сценарии кастомизации

  • увеличение зоны нажатия кнопки → point(inside:)

  • прокидывание касаний сквозь view → hitTest

  • сложные overlay-экраны → переопределение обоих методов

Краткий вывод

point(inside:) — логический фильтр, hitTest — механизм выбора обработчика. Путаница между ними приводит к трудноуловимым багам в обработке касаний.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    8

Навыки

  • IOS

    IOS

Ключевые слова

#hittest

#pointinside

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.