1

在我的 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
        }
    }
}
4

2 回答 2

1

我建议使用UISwipeGestureRecognizer滑动。你用平底锅有什么特别的原因吗?

使用 aUISwipeGestureRecognizer您可以指定它应该识别手势的方向。

使用适当的手势对您的用户也更好。这样,他们就会有宾至如归的感觉:)

于 2012-10-17T20:15:50.373 回答
0

您应该UISwipeGestureRecognizer按照 fguchelaar 的建议使用 a ,或者使用该translationInView:方法来确定用户实际移动了手指的距离(对于轻击,应该接近于零)。

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

于 2012-10-17T22:08:01.083 回答