我有一个视图,我打电话给parentView
,其中有一个名为childView
的子视图。部分childView
超出了parentView
的范围,childView
附加了panGestureRecognizer
。我在parentView
中实现了以下功能,以便它能够识别childView
的触摸,即使它超出了其超视图范围:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if (!self.clipsToBounds && !self.hidden && self.alpha > 0)
{
for (UIView *subview in self.subviews)
{
CGPoint subPoint = [subview convertPoint:point fromView:self];
UIView *result = [subview hitTest:subPoint withEvent:event];
if (result != nil)
{
return result;
break;
}
}
}
return [super hitTest:point withEvent:event];
}
然而,当我触摸或拖动childView
时,hitTest
甚至没有调用parentView
。这是为什么?
答案 0 :(得分:1)
因为事件在响应者链中发生故障并在hittest被调用之前被使用
所以在这种情况下事件从上到下...查看有关响应者链的文档:
但是,现在还不是很清楚:D http://developer.apple.com/library/ios/#DOCUMENTATION/EventHandling/Conceptual/EventHandlingiPhoneOS/Introduction/Introduction.html但重要的一点:
点击测试视图是第一次处理触摸事件的机会。如果命中测试视图无法处理事件,则事件将按照“响应者链由响应者对象组成”中所述向该视图的响应者链传播,直到系统找到可以处理它的对象为止。
< / LI>触摸事件。如果命中测试视图无法处理触摸事件,则会向事件传递一系列以命中测试视图开头的响应者。