【问题标题】:UIGestureRecognizerStateBegan calling twice in iOS 6UIGestureRecognizerStateBegan 在 iOS 6 中调用两次
【发布时间】:2013-03-12 14:00:22
【问题描述】:

提前致谢,我想分享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 被调用两次以导致应用程序崩溃。 非常欢迎任何帮助。

【问题讨论】:

标签: iphone ios retina-display


【解决方案1】:

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

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

第一次通话表明您检测到长按,即UIGestureRecognizerStateBegan 第二个电话表明您该水龙头已结束,即UIGestureRecognizerStateBegan

点击有三种状态

  1. UIGestureRecognizerStateBegan
  2. UIGestureRecognizerStateChanged
  3. UIGestureRecognizerStateEnded

如果你拖动手指,它会调用多次,表明它的状态发生了一些变化。

关注UILongPressGestureRecognizer Class Reference了解更多

【讨论】:

  • 不,我没有按和移开手指。它发生在同一事件上,即按下。这就是为什么它可以在 iOS4 和 ios5 上运行,但不能在 ios6 上运行
  • 当您按下手指时,它表示正在发生事件,完成长按后表示点击结束
  • 我还没有完成敲击。我还在长按。
  • 我在 iOS 6 上尝试了你的代码,并且 nslog 中的输出是 Long Tap detacted。和长按结束。
  • 感谢您的回复。我也期望在所有版本的 ios 中都一样。但我没有在带有视网膜显示的 iOS 6 中收到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
相关资源
最近更新 更多