为什么触摸视图子视图时hitTest不会被调用?
问题描述:
我有一个视图,我打电话给parentView
,它有一个名为childView
的子视图。 childView
的一部分在parentView
的范围之外,并且childView
有panGestureRecognizer
连接到它。我已经实现在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];
}
然而,当我触摸或拖动childView
,hitTest
甚至没有被呼吁parentView
。为什么是这样?
答
,因为事件发生故障的响应链,并使用则hitTest被称为
因此事件从顶部进入底部在这种情况下,前...检查出的文档关于响应链:
但重要的一点:
命中测试视图是处理触摸事件的第一个机会。如果命中测试视图无法处理事件,则该事件沿着“响应者链由响应者对象组成”中所述的视图的响应者链向上移动,直到系统找到可处理它的对象。
触摸事件。如果命中测试视图无法处理触摸事件,则会从响应测试视图开始传递一系列响应者。
@downvoter:请发表评论 – 2016-04-19 15:51:27