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

Ser*_*nce 5 iphone cocoa-touch uiview hittest ios

我有一个我称之为的视图,parentView它有一个名为 的子视图childView。的一部分childView在 的范围之外parentViewchildView并附有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];
}
Run Code Online (Sandbox Code Playgroud)

然而当我触摸或拖动时childViewhitTest却根本不被调用了parentView。为什么是这样?

Dai*_*jan 3

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

\n\n

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

\n\n

不过还不是很清楚:D\n http://developer.apple.com/library/ios/#DOCUMENTATION/EventHandling/Conceptual/EventHandlingiPhoneOS/Introduction/Introduction.html

\n\n

但重要的是:

\n\n
    \n
  • 命中测试视图首先有机会处理触摸事件。如果命中测试视图无法处理事件,则事件将沿该视图\xe2\x80\x99s 响应者链向上移动,如\xe2\x80\x9c中所述响应者链由响应者对象\xe2\x80\x9d 组成,直到系统找到一个可以处理它的对象。

  • \n
  • 触摸事件。如果命中测试视图无法处理触摸事件,则该事件会沿着从命中测试视图开始的响应器链向上传递。

  • \n
\n

  • 我从未声称这不是真的。真的是。我只是提供了该资源的链接,因为另一个链接只是将您重定向到 Apple 的标准“UIKit”站点。 (2认同)