为什么触摸视图子视图时hitTest不会被调用?

问题描述:

我有一个视图,我打电话给parentView,它有一个名为childView的子视图。 childView的一部分在parentView的范围之外,并且childViewpanGestureRecognizer连接到它。我已经实现在parentView以下,使其认识到润色childView即使它是其superviews范围之外:为什么触摸视图子视图时hitTest不会被调用?

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

,因为事件发生故障的响应链,并使用则hitTest被称为

因此事件从顶部进入底部在这种情况下,前...检查出的文档关于响应链:

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

但重要的一点:

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

  • 触摸事件。如果命中测试视图无法处理触摸事件,则会从响应测试视图开始传递一系列响应者。

+0

@downvoter:请发表评论 – 2016-04-19 15:51:27