使用GestureRecogniser转发基础视图

时间:2017-03-08 09:46:43

标签: ios swift uiview

我有一个叠加视图,可以覆盖许多兄弟视图(按钮)。

我正在尝试使用此答案将触摸转发到叠加层视图下方的同级视图:https://stackoverflow.com/a/4847478

这是因为我的叠加视图包含GestureRecognisers。

我希望叠加视图能够识别手势(包括按钮上的手势)并将所有触摸事件传递给它下面的兄弟视图。

我发现事件确实已转发,但按钮点击仍未触发,可能是由于触摸由叠加视图拥有。

我认为不可能改变触摸的所有权。

如果实际上正在转发事件,我如何才能点击按钮进行注册?

1 个答案:

答案 0 :(得分:0)

对于您的问题,您必须将响应者传递到下一级别,如果其alpha值为0并且基于该值将它将响应者消息传递到下一个视图,通过这种方式,您可以触摸或单击按钮。

在容器视图中覆盖pointInside:方法并检查触摸的视图alpha是 0 ,而不是传递返回,以便将传递消息传递给下一个响应者。

像这样:

-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    for (UIView *view in self.subviews) {
        if (!view.hidden && view.alpha > 0 && view.userInteractionEnabled && [view pointInside:[self convertPoint:point toView:view] withEvent:event])
            return YES;
    }
    return NO;
}

希望这有助于您了解响应者链 有关详细信息,请查看此接受的答案:How can I click a button behind a transparent UIView?