使用GestureRecogniser转发底层视图


0

我有覆盖许多兄弟视图(按钮)的覆盖视图。

我试图触摸转发到是覆盖视图下使用这里这个答案同级观点:https://stackoverflow.com/a/4847478

这是因为我的叠加观点有GestureRecognisers。

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

我发现事件确实被转发,但按钮点击仍未触发,可能是由于触摸属于覆盖视图。

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

如果事件确实被转发,我怎样才能获得按钮点击注册?

  0

其中,增加您的按钮?覆盖或覆盖以下? 08 3月. 172017-03-08 09:57:26

  0

覆盖下面的@CodeChanger; (透明)覆盖层覆盖按钮。 08 3月. 172017-03-08 09:59:52

  0

您的覆盖层是否透明?这可能是因为您不需要叠加层,但实际上只是想将手势识别器添加到按钮的超级视图中,然后可以实现它的委托以允许其他识别器同时识别它。如果这听起来像是您的解决方案,请告诉我,我可以提供更详细的解决方案? 08 3月. 172017-03-08 11:44:40

  0

@GeorgeGreen是的,我不需要覆盖视图。我需要在SuperView上识别所有手势,并且即使手势已被识别,也可以将触摸传递给按钮。 我有IBActions连接到按钮的TouchUpInside事件。现在,即使按钮获得了touchesBegan,touchesMoved等电话,TouchUpInside事件也不会触发。我不想实施TouchUpInside的自定义检测。 08 3月. 172017-03-08 22:28:44

  0

@ignoramus有趣的是,如果你删除了叠加层并将手势识别器移动到超级视图,那么它应该与其他控件一起玩。你可以发布导致问题的控制器代码,我们应该能够解决这个问题吗? 08 3月. 172017-03-08 22:34:21

  0

@GeorgeGreen是的,它的工作原理。非常感谢你!你可以发表你的评论作为答案,我可以接受它吗? 09 3月. 172017-03-09 00:18:18

0

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

覆盖pointInside:方法在容器中视图,并检查是否触摸视图alpha为比通作通消息返回NO到下一个响应者。

这样的:

-(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?

  0

不幸的是,无论触摸是否在按钮上,我都需要在叠加视图上识别手势,这是行不通的。 08 3月. 172017-03-08 10:20:28

  0

你有没有在你的代码中尝试过以上的东西? 08 3月. 172017-03-08 10:22:48

  0

对不起,我误读了,我现在就试一试。 08 3月. 172017-03-08 10:26:19

  0

但根据你的问题,你需要按钮事件不是按钮上的手势识别器事件我是对吗? 08 3月. 172017-03-08 10:26:33

  0

好吧,我刚刚尝试过它,它不起作用。我需要在所有覆盖视图上使用手势识别器事件,包括在按钮上。我编辑了这个问题来澄清这一点。 08 3月. 172017-03-08 10:37:45

  0

好的,在这种情况下你可以做的另一件事情是检测手势识别器中的按钮,但为此你可以发布一些代码,以便我们可以了解如何在视图中使用按钮和手势? 08 3月. 172017-03-08 10:51:08