Ответ
UIView пропускает или не получает события касания при следующих условиях:
- Свойства видимости и взаимодействия:
isUserInteractionEnabled = falseisHidden = truealpha <= 0.01
- Геометрия:
- Касание произошло за пределами границ вью (
bounds). - Если
clipsToBounds = true, части вью за своими границами не получают события.
- Касание произошло за пределами границ вью (
- Перехват события другой вью: Вью с более высоким порядком в иерархии (расположенная поверх) может перехватить событие.
- Кастомная логика hit-testing: Неправильная реализация методов
hitTest(_:with:)илиpoint(inside:with:)может привести к потере события.// Пример: вью игнорирует все касания override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { return false }
Для отладки используйте:
- Debug View Hierarchy в Xcode для визуализации слоёв.
- Проверку флагов
isUserInteractionEnabled,alpha,isHidden. - Пошаговый анализ цепочки ответа (
hit-test chain).