1

根据我已经从这个问题Detecting the direction of PAN gesture in iOS 中由 H2CO3 回答的信息,您可以UIPanGestureRecognizer使用以下方法检测向左或向右移动:

CGPoint vel = [gesture velocityInView:self.view];
if (vel.x > 0)
 {
     // user dragged towards the right
 }
 else
 {
     // user dragged towards the left
 }

UILongPressGestureRecognizer我想通过在用户进入状态时使用点击并按住类似于上面代码的按钮来检测左右移动UIGestureRecognizerStateChanged,但似乎我不能简单地使用它velocityInView来使事情在我的情况下工作。

任何人都可以帮助我吗?

4

1 回答 1

6

首先将识别器设置allowableMovement为一个较大的值(默认为 10 像素)。并使用以下代码

-(void)longPressed:(UILongPressGestureRecognizer*)g
{
    if (g.state == UIGestureRecognizerStateBegan) {
        _initial = [g locationInView:self.view]; // _initial is instance var of type CGPoint
    }
    else if (g.state == UIGestureRecognizerStateChanged)
    {
        CGPoint p = [g locationInView:self.view];
        double dx = p.x - _initial.x;
        if (dx > 0) {
            NSLog(@"Finger moved to the right");
        }
        else {
            NSLog(@"Finger moved to the left");
        }
    }
}

请注意,它UILongPressGestureRecognizer是连续的,因此您将收到 multiples UIGestureRecognizerStateChangedUIGestureRecognizerStateEnded如果您只希望在用户抬起手指时收到一个通知,请使用此选项。

于 2013-07-03T03:38:42.093 回答