如何识别弹出视图上的手势而不中断下方视图上的手势识别?

时间:2016-04-05 09:59:20

标签: ios uiview uigesturerecognizer

我有一个自定义的半透明视图,其中包含识别单指手势的自定义手势识别器。它会弹出一个全屏视图。用户使用捏合和旋转手势与全屏视图交互。

所以我想要实现的是防止弹出视图干扰用户继续捏合和旋转全屏视图的能力,即使在弹出视图中也是如此&# 39;边界。弹出视图只需要响应我的自定义单指手势识别器。

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    if (event.allTouches.count > 1) {
        return NO;
    }

    ...
}

我认为上面的代码可能已经破解了它,但遗憾的是,当调用pointInside时,触摸不会被填充。还有其他建议吗?

3 个答案:

答案 0 :(得分:0)

我认为你需要UIGestureRecognizerDelegate协议。特别是那些方法:

- gestureRecognizer:shouldReceiveTouch:

- gestureRecognizer:shouldRequireFailureOfGestureRecognizer:
- gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:

答案 1 :(得分:0)

您可以使用以下方法

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

我已经使用了touchesBegan,在那里我没有接触,并根据你可以做任何你想做的条件。

以下是示例代码

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//Varible used for counting touches
        int nFingers += [touches count];
        //finger points
        for (UITouch *touch in touches) {
            if (nFingers < 1){
                CGPoint location = [touch locationInView:self];
            }
        }
    }

答案 2 :(得分:0)

经过两天的工作,我找到了一个非常简单的答案。我希望它对某人有帮助。在弹出视图的初始化中,只需将手势识别器添加到超级视图或任何全屏视图,而不是弹出窗口自己的视图。目标仍然可以是弹出视图:

    self.recognizer = [[MyGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
    [fullscreenView addGestureRecognizer:self.recognizer];

然后禁用用户互动:

    self.userInteractionEnabled = NO;

这不会影响弹出视图中的手势,并且与弹出窗口下方的视图相关联的手势现在也可以正常工作。如果他们互相竞争,那么lorenzoliveto的回答中的覆盖可以对此进行排序。