Я думаю, что в документации hitTest есть некоторая «дезинформация».Я столкнулся с подобной проблемой, помещая в окно 4 экземпляра подкласса, каждый с четырьмя подслоями.Каждый из 4 подклассов представления имел метод touchesBegan: withEvent и метод touchesEnded: withEvent.Я обнаружил, что если мое касание приземлилось или закончилось в левом верхнем углу экрана, мой hitTest вернул верный подслой.Однако hitTests в любом из трех других представлений вернул ноль для подслоя.Как и вы, я был полностью в замешательстве, пока не решил заменить точку касания в системе координат вида на точку для системы координат окна, и тогда все заработало.Я воспроизводлю документацию для метода hitTest:
hitTest: Возвращает самого дальнего потомка получателя в иерархии слоев (включая самого себя), который содержит указанную точку.
- (CALayer *)hitTest:(CGPoint)thePoint
Параметры thePoint Aточка в системе координат суперслоя получателя.Возвращаемое значение Слой, содержащий thePoint или nil, если точка находится за пределами прямоугольника границ получателя.
Доступен Доступно в Mac OS X v10.5 и более поздних версиях.Объявленный в CALayer.h
Я бы сказал, основываясь на моих наблюдениях, что объяснение 'thePoint' неверно.Я думаю, что это должно читаться как «Точка в системе координат окна, содержащего приемник».Я думаю, единственная причина, по которой в верхнем левом представлении были введены правильные значения hitTests, заключалась в том, что координаты касания в этом месте совпадают с координатами касания в окне.Не знаю, поможет ли это вам, но это помогло мне заставить мою логику работать.VV