如何检查平移手势未移动

时间:2014-04-11 12:08:37

标签: ios objective-c uipangesturerecognizer

我查看从一个位置到另一个位置的视图。我可以在移动时获得点的位置,但是我想在平移未移动或在某一点空闲时执行某些操作。我没有看到任何状态显示平移手势是空闲的。我遇到的触摸事件是UITouchPhaseStationary nut我不知道如何实现它。

3 个答案:

答案 0 :(得分:2)

没有状态,this post中解释的UITouchPhaseStationary用于多点触控,并让您知道屏幕上是否有另一个静止的手指,而另一个手指正在移动。

但是,你可以自己实现这样的东西。只需将时间间隔设置为超时的定时器,然后应将触摸视为静止,并在手势位置发生变化时运行。当手势结束时以及手势改变以重置计时器时,您将希望使计时器无效。这是一个例子。

- (void)gestureDidFire:(UIPanGestureRecognizer *)gesture
{
    static NSTimer *timer = nil;

    if (gesture.state == UIGestureRecognizerStateChanged) {
        if (timer.isValid) {
            [timer invalidate];
        }

        timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerDidFire:) userInfo:nil repeats:NO];

    }else if (gesture.state == UIGestureRecognizerStateEnded) {
        if (timer.isValid) {
            [timer invalidate];
        }
    }
}

- (void)timerDidFire:(NSTimer *)timer
{
    NSLog(@"Stationary");
}

答案 1 :(得分:0)

您可以实施touchesEnded:withEvent:以确定触摸何时结束。在panGesture方法上设置一个标志,然后检查该值

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    if (self.hasMoved) {
       // Do something
       self.hasMoved = NO;
    }
}

答案 2 :(得分:0)

试试这个

    - (void)panRecognized:(UIPanGestureRecognizer *)rec
    {
    CGPoint vel = [rec velocityInView:self.view];
     if (vel.x == 0 && vel.y == 0)
     {
       // Not moved
     }
     else
              // moved
    }