iphone - 按下时 UILongPressGestureRecognizer 被调用两次

我正在检测用户是否按下了 2 秒:

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
                                             initWithTarget:self 
                                             action:@selector(handleLongPress:)];
        longPress.minimumPressDuration = 2.0;
        [self addGestureRecognizer:longPress];
        [longPress release];

这就是我处理长按的方式:

-(void)handleLongPress:(UILongPressGestureRecognizer*)recognizer{
    NSLog(@"double oo");
}

当我按下超过 2 秒时,文本“double oo”会打印两次。为什么是这样?我该如何解决?

最佳答案

UILongPressGestureRecognizer 是一个连续事件识别器。您必须查看状态,看看这是事件的开始、中间还是结束,并采取相应的行动。即您可以在开始后丢弃所有事件,或者仅根据需要查看运动。来自 Class Reference :

Long-press gestures are continuous. The gesture begins (UIGestureRecognizerStateBegan) when the number of allowable fingers (numberOfTouchesRequired) have been pressed for the specified period (minimumPressDuration) and the touches do not move beyond the allowable range of movement (allowableMovement). The gesture recognizer transitions to the Change state whenever a finger moves, and it ends (UIGestureRecognizerStateEnded) when any of the fingers are lifted.

现在您可以像这样跟踪状态

-  (void)handleLongPress:(UILongPressGestureRecognizer*)sender { 
    if (sender.state == UIGestureRecognizerStateEnded) {
      NSLog(@"UIGestureRecognizerStateEnded");
    //Do Whatever You want on End of Gesture
     }
    else if (sender.state == UIGestureRecognizerStateBegan){
       NSLog(@"UIGestureRecognizerStateBegan.");
   //Do Whatever You want on Began of Gesture
     }
  }

https://stackoverflow.com/questions/3319591/

相关文章:

ios - 何时使用 NSInteger 与 int

objective-c - 如何纯粹用 C 编写 iOS 应用程序

objective-c - "sending ' 常量 NSString * ' to parame

ios - 如何删除 UITableView 中的空单元格?

ios - 在 Objective-C 中使用 GCD 的 dispatch_once 创建单例

objective-c - objectForKey 和 valueForKey 的区别?

objective-c - 如何按比例缩放 UIImageView?

objective-c - 如何在 Objective-C 中反转 NSArray?

objective-c - Xcode 的隐藏功能

objective-c - 如何使用 NSTimer?