触摸视图子视图时为什么没有调用hitTest?

时间:2013-03-17 21:36:11

标签: iphone ios cocoa-touch uiview hittest

我有一个视图,我打电话给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。这是为什么?

1 个答案:

答案 0 :(得分:1)

因为事件在响应者链中发生故障并在hittest被调用之前被使用

所以在这种情况下事件从上到下...查看有关响应者链的文档:

但是,现在还不是很清楚:D http://developer.apple.com/library/ios/#DOCUMENTATION/EventHandling/Conceptual/EventHandlingiPhoneOS/Introduction/Introduction.html

但重要的一点:

  • 点击测试视图是第一次处理触摸事件的机会。如果命中测试视图无法处理事件,则事件将按照“响应者链由响应者对象组成”中所述向该视图的响应者链传播,直到系统找到可以处理它的对象为止。

    < / LI>
  • 触摸事件。如果命中测试视图无法处理触摸事件,则会向事件传递一系列以命中测试视图开头的响应者。