4

我有一个视图,我会调用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];
}

然而当我触摸或拖动时childViewhitTest甚至都没有被叫上parentView。为什么是这样?

4

1 回答 1

2

因为事件沿着响应者链传递,并在调用 hittest 之前使用

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

虽然不是很清楚:D http://developer.apple.com/library/ios/#DOCUMENTATION/EventHandling/Conceptual/EventHandlingiPhoneOS/Introduction/Introduction.html

但重要的一点:

  • 命中测试视图首先有机会处理触摸事件。如果命中测试视图无法处理事件,则事件会沿着该视图的响应者链向上传播,如“响应者链由响应者对象组成”中所述,直到系统找到可以处理它的对象。

  • 触摸事件。如果命中测试视图无法处理触摸事件,则该事件将向上传递以命中测试视图开始的响应链。

于 2013-03-17T21:57:24.103 回答