0

提前致谢,我想分享UILongPressGestureRecognizer.

UIView *v = [UIView alloc] initWithFrame:CGRectMake(0,0,20,20)];
UILongPressGestureRecognizer *longpressGesture1 = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[v addGestureRecognizer:longpressGesture1];

这里是处理手势识别器的代表。

-(IBAction)tapped:(UILongPressGestureRecognizer *) gesture

{ 
    switch ([gesture state]) {
        case UIGestureRecognizerStateBegan:
        {

            NSLog(@"Long Tap detacted.");  

        }
            break;
        case UIGestureRecognizerStateChanged:
        {
            NSLog(@"UIGestureRecognizerStateChanged");


        }
            break;
        case UIGestureRecognizerStateEnded:
        {
            NSLog(@"Long Tap ended.");

        }
            break;

    }

}

这段代码在 iOS 4 和 5 中按预期完美运行,但在具有视网膜显示的 ios 6 中,当我们执行长按时,UIGestureRecognizerStateBegan一次长按会被调用两次,从而导致应用程序崩溃。非常欢迎任何帮助。

4

1 回答 1

2

UILongPressGestureRecognizer 是一个连续事件识别器。您必须查看状态,看看这是事件的开始、中间还是结束,并采取相应的行动。

它调用了两次,因为您正在按下和移开手指。

第一次通话表示您检测到长按,即UIGestureRecognizerStateBegan 第二次通话表示您已结束该轻按,即UIGestureRecognizerStateBegan

水龙头有三种状态

  1. UIGestureRecognizerStateBegan
  2. UIGestureRecognizerStateChanged
  3. UIGestureRecognizerStateEnded

如果你拖动你的手指,那么它会调用多次,这表明它的状态有一些变化。

关注UILongPressGestureRecognizer 类参考了解更多

于 2013-03-12T14:15:37.667 回答