Создать собственный метод hitTest без использования событий

Проверяйте доступность view и попадание в bounds, затем обходите subviews в обратном порядке, переводя точку в координаты каждого ребёнка.

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

Что ответить на собеседовании

Проверяйте доступность view и попадание в bounds, затем обходите subviews в обратном порядке, переводя точку в координаты каждого ребёнка.

Подробный разбор

Ответ с пояснениями

Условие

Разработать простой механизм hitTest, обходясь без системных событий, который позволяет определить, в какой дочерний UIView попал переданный CGPoint.

Ответ

Проверяйте доступность view и попадание в bounds, затем обходите subviews в обратном порядке, переводя точку в координаты каждого ребёнка.

Упрощённый геометрический hit-test без UIEvent:

func hitTest(_ point: CGPoint, in view: UIView) -> UIView? {
    guard !view.isHidden, view.alpha > 0.01,
          view.isUserInteractionEnabled,
          view.bounds.contains(point) else { return nil }
    for child in view.subviews.reversed() {
        let local = child.convert(point, from: view)
        if let hit = hitTest(local, in: child) { return hit }
    }
    return view
}

Начальная точка задаётся в координатах root-view. Обратный обход даёт приоритет верхним subviews. Это базовая модель: она не учитывает пользовательские переопределения point(inside:with:), нестандартные области нажатия и presentation-геометрию во время анимации. Если нужны только дочерние элементы, исключите root из результата.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее