В чем разница pointInside и hitTest
Что проверяют
Знаете ли вы, как UIKit находит view, которой достанется касание, и умеете ли вмешаться в этот поиск. Следом почти всегда дают практическую задачу: увеличить зону нажатия маленькой кнопки или сделать оверлей, прозрачный для касаний.
Как отвечать
Начните с того, что это не два альтернативных метода, а части одного механизма. Когда палец касается экрана, UIWindow вызывает hitTest(_:with:), и поиск рекурсивно идёт вниз по иерархии:
hitTest(_:with:): отвечает на вопрос «какая view получит касание». Реализация по умолчанию сразу возвращаетnil, если view скрыта, у неёisUserInteractionEnabled == falseилиalphaменьше 0.01. Затем зовётpoint(inside:with:)и приfalseтоже возвращаетnil. Иначе обходитsubviewsот верхней к нижней, переводит точку в их координаты и спрашивает каждую. Первый ненулевой ответ побеждает, а если дочерние касание не взяли, возвращается сама view;point(inside:with:): отвечает на вопрос «попадает ли точка в меня». По умолчанию этоbounds.contains(point)в локальных координатах. Сам он никого не ищет, это фильтр внутриhitTest.
Дальше покажите, что где переопределять. Зону нажатия кнопки расширяют через point(inside:with:): bounds.insetBy(dx: -12, dy: -12).contains(point). Оверлей, пропускающий касания вниз, делают через hitTest: вызвать super, и если результат равен self, вернуть nil. Для кнопки, торчащей за границы родителя, переопределяют hitTest у родителя и явно проверяют эту кнопку.
В SwiftUI похожие задачи решают contentShape и allowsHitTesting.
Где спотыкаются
Считают, что clipsToBounds = false сделает кнопку за пределами родителя нажимаемой. Это влияет только на отрисовку: родитель в point(inside:with:) ответит «не моё», и до кнопки поиск не дойдёт.
Путают порядок обхода. Подвью проверяются с конца массива, поэтому выигрывает добавленная последней, то есть визуально верхняя.
Кладут в hitTest побочные эффекты: логирование, смену состояния, анимации. Система может вызвать метод несколько раз на одно касание. Это чистый поиск, а обработка идёт позже, в touchesBegan и распознавателях жестов.