Если я правильно понял, это довольно просто: hitTest
всегда возвращает самое дальнее дочернее подпредставление в представлении.Если нет подпредставления, это всегда один и тот же вид.Если он есть, это подпредставление может быть возвращено взамен.Вот как вы можете это исправить:
self.hitView = [super hitTest:point withEvent:event];
if ([self.hitView isDescendantOfView: self])
self.hitView = self;
РЕДАКТИРОВАТЬ Теперь, когда я лучше понимаю проблему, вам, возможно, следует сделать следующее.Этот код возвращает суперпредставление, которое является прямым потомком внешнего представления:
UIView *hitView = [super hitTest:point withEvent:event];
while (hitView && hitView.superview != self)
hitView = hitView.superview;
(Обратите также внимание, что вы должны использовать локальную переменную и изменить свое свойство позже, чем).