【问题标题】:Receiving touch events on more then one UIView simultaneously同时在多个 UIView 上接收触摸事件
【发布时间】:2011-01-03 13:56:10
【问题描述】:

我有一堆UIViews 堆叠在一起(不是嵌套的)。我希望他们都对触摸做出反应,但似乎最顶层的视图掩盖了它下面的视图,阻止它们接收触摸事件。

起初我以为我会用最顶层的视图捕获所有触摸事件,然后在所有底层视图上手动调用
hitTestpointInside 方法,但我发现这两种方法都不知何故私有(可以吗?),无法访问。

有什么方法可以实现吗?

【问题讨论】:

    标签: objective-c events uiview touch stacked


    【解决方案1】:

    您可以检查触摸是否适用于您的最顶层视图。如果不是,您可以调用您的超级视图的相同方法。类似于 [self.superview sameMethod:sameParameter]。

    你的顶层视图有一个方法

    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
    

    在该方法中,您正在执行您的逻辑吗? 在方法内部,您不能检查收到的触摸是否在您的最顶层视图中

    UITouch *touch = [touches anyObject];
    [touch locationInView:self];

    如果没有,则使用

    将其传递给 superView 的相同方法
    [self.superview touchesEnded:touches withEvent:event];
    

    【讨论】:

    • 错字:"superView" => "superview"
    【解决方案2】:

    触摸被发送到单个视图。然后,该视图可以选择将它们传递给响应者链。如果您想处理对一组视图的触摸,您应该让它们将这些事件转发给下一个响应者,并让它们有一个共同的父级(或它们的视图控制器,因为控制器也是响应者链的一部分)处理这些触摸。

    https://developer.apple.com/library/mac/documentation/General/Devpedia-CocoaApp-MOSX/Responder.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多