我有一个名为 parentView 的 View ,它有一个名为 childView 的 subview 。 childView 的一部分在 parentView 的范围之外,并且 childView 附加了一个 panGestureRecognizer。我在 parentView 中实现了以下内容,以便它可以识别对 childView 的触摸,即使它在其 super View 范围之外:

- (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 。为什么是这样?

最佳答案

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

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

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

但重要的一点:

  • HitTest View 第一次有机会处理触摸事件。如果 HitTest View 无法处理事件,则该事件沿该 View 的响应者链向上传播,如“响应者链由响应者对象组成”中所述,直到系统找到可以处理它的对象。
  • 触摸事件。如果 HitTest View 无法处理触摸事件,则该事件会向上传递以 HitTest View 开始的响应器链。
  • 关于iphone - 为什么在触摸 View subview 时没有调用 hitTest?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15466507/

    10-16 22:24