使用UILongPressGestureRecognizer检测左右移动?

时间:2013-07-03 03:24:01

标签: ios objective-c uigesturerecognizer

根据我在H2CO3回答的问题Detecting the direction of PAN gesture in iOS中所知,您可以使用以下方法检测UIPanGestureRecognizer中的左移或右移:

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

当用户点击并按住与上面代码类似的按钮时,我想检测向左或向右移动当用户输入UILongPressGestureRecognizer状态时使用UIGestureRecognizerStateChanged,但似乎我不能简单地使用{{ 1}}让事情在我的案例中发挥作用。

任何人都可以帮助我?

1 个答案:

答案 0 :(得分: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是连续的,因此您将获得倍数UIGestureRecognizerStateChanged。如果您只想在用户抬起手指时收到一条通知,请使用UIGestureRecognizerStateEnded