iphone - UIGestureRecognizerStateBegan 在 iOS 6 中调用两次

标签 iphone ios retina-display

提前致谢,我想分享 UILongPressGestureRecognizer 的奇怪行为。

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

这里是处理手势识别器的委托(delegate)。

-(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 被调用两次以进行一次长按,结果在应用程序崩溃中。 非常欢迎任何帮助。

最佳答案

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

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

第一个电话指示您检测到长按,即 UIGestureRecognizerStateBegan 第二次调用表明您该点击已结束,即 UIGestureRecognizerStateBegan

点击的三种状态

  1. UIGestureRecognizerStateBegan
  2. UIGestureRecognizerStateChanged
  3. UIGestureRecognizerStateEnded

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

关注UILongPressGestureRecognizer Class Reference更多

关于iphone - UIGestureRecognizerStateBegan 在 iOS 6 中调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15363311/

相关文章:

ios - 使用自定义对象对NSMutableArray进行排序

iphone - 为什么 Apple 建议在 GCD 上使用 runloop 来获取多张图片?

ios - 我怎样才能创建这个 NSArray

html - 在桌面上开发 4K 分辨率,还是让浏览器处理缩放?

php - 在服务器端检测视网膜(高清)显示器

image - 修复 mac 视网膜使用的浏览器上的模糊图像

ios - 尽管没有错误或没有崩溃或卡住,但 Segue 未加载

iphone - 寻找 Xcode 设置文件夹

iPhone 开发 - 手动旋转 View

iphone - 多个静态库、swizzling 和dispatch_once