如何阻止UIPanGestureRecognizer识别水龙头

时间:2012-10-17 20:13:27

标签: objective-c ios uigesturerecognizer segue

在我的iPhone应用程序的一个UIViewControllers上,我附加了一个UIPanGestureRecognizer,这样当用户向左或向右滑动时,应用程序会前进或返回一个屏幕。然而,问题在于当用户在屏幕上轻敲(而不是轻扫)时它仍然前进。我怎么能阻止这种情况发生。我已粘贴以下相关代码:

-(void) addGestureRecognizer
{
    UIPanGestureRecognizer *pan;
    pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRecognized:)];
    [pan setMinimumNumberOfTouches:1];
    [self.view addGestureRecognizer:pan];
}

-(void) swipeRecognized: (UIPanGestureRecognizer  *) recognizer
{
    if(recognizer.state != UIGestureRecognizerStateBegan) return;
    CGPoint velocity = [recognizer velocityInView:self.view];
    if(velocity.x > 0)
    {
        [self.navigationController popViewControllerAnimated:YES];
    }
    else
    {
        @try
        {
            [self performSegueWithIdentifier:NEXT_STEP_SEGUE sender:self];
        }
        @catch (NSException *exception)
        {
            //Silently die...muhaha
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我建议使用UISwipeGestureRecognizer进行滑动。您是否有使用平底锅的特殊原因?

使用UISwipeGestureRecognizer,您可以指定识别手势的方向。

对于您的用户来说,使用适当的手势也会更好。这样,他们会感到宾至如归:)

答案 1 :(得分:0)

你应该按照fguchelaar的建议使用UISwipeGestureRecognizer,或者使用translationInView:方法计算用户实际移动手指的距离(对于水龙头,应该接近零)

如果状态不是UIGestureRecognizerStateBegan(方法中的第一行),您也不应该提前返回,否则您的方法只会在手势开始时调用一次,但不会在手势期间调用。如果那是你真正想要的,那么你需要UISwipeGestureRecognizer。平移手势识别器的好处主要在于您可以跟踪用户的手指并提供直接反馈(例如在手指静止时移动视图)。