2011-07-05 51 views
16

当用户单抽头我认为,我需要运行一个特定的方法。 当用户双击时,我需要另一种方法。滤波单,双抽头

的问题是,双击触发单轻叩,它在我的逻辑引入错误。 因为我需要跟踪点我不能使用UIGestureRecognizer。

我尝试一些布尔值,但没有机会。我也试过取消/ perfomSelector延迟技术,但它不工作(这很奇怪,因为其他论坛上的其他人说它的工作原理,也许模拟器触摸检测是不同的?)

我想让用户设置棋子的位置(拖动,旋转),但我需要知道棋子的交叉点,剪辑到棋盘区等,这就是为什么一个简单的布尔值不能解决问题的原因。

在此先感谢!

+0

应该张贴您的取消/ perfomSelector延迟代码,工作正常。 – mackworth

回答

44

检查this,似乎是正确的,你在找什么:

下面的代码使用UITapGestureRecognizer处理一个水龙头和双击。该代码被设计为,如果我们有双击事件,它将不会触发单击事件。诀窍是使用requireGestureRecognizerToFail来请求单击手势等待双击事件失败之前触发。所以当用户点击屏幕时,单击手势识别器将不会触发该事件,直到双击手势识别器。如果双击手势识别器识别该事件,则它将触发双标签事件并跳过单击事件,否则将触发单击事件。

UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc] 
          initWithTarget:self action:@selector(handleDoubleTap:)]; 
    doubleTapGestureRecognizer.numberOfTapsRequired = 2; 

    //tapGestureRecognizer.delegate = self; 
    [self addGestureRecognizer:doubleTapGestureRecognizer]; 

    // 
    UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; 
    singleTapGestureRecognizer.numberOfTapsRequired = 1; 

    [singleTapGestureRecognizer requireGestureRecognizerToFail: doubleTapGestureRecognizer]; 
    //tapGestureRecognizer.delegate = self; 
    [self addGestureRecognizer:singleTapGestureRecognizer]; 

也许我完全不明白你的“我需要跟踪点”的意思,但我没有看到与手势识别这样做的任何问题。

+0

非常感谢你,这有效,但我发现另一个问题...我有一个CGPoint实例变量,跟踪拖动开始点(在touchesBegan中设置)。如果用户拖动片到一个不正确的地点(如在另一块的顶部)中,i设定件位置到该开始点,在touchesEnded。但是,如果用户旋转了一块,并设置了不正确的位置,我的起点将被触点所取代,我将无法将该块重置为起点......我很困惑实现这个简单的旋转/下降片定位! – Fernando

+0

这很棒 –

1

夫特解决方案:

doubleTapSmall1.numberOfTapsRequired = 2 
    doubleTapSmall1.addTarget(self, action: "doubleTapPic1") 
    smallProfilePic1.addGestureRecognizer(doubleTapSmall1) 

    singleTapSmall1.numberOfTapsRequired = 1 
    singleTapSmall1.addTarget(self, action: "singleTapPic1") 
    singleTapSmall1.requireGestureRecognizerToFail(doubleTapSmall1) 
    smallProfilePic1.addGestureRecognizer(singleTapSmall1) 
1

夫特3解决方案:

doubleTap = UITapGestureRecognizer(target: self, action:#selector(self.doubleTapAction(_:))) 
doubleTap.numberOfTapsRequired = 2 


singleTap = UITapGestureRecognizer(target: self, action:#selector(self.singleTapAction(_:))) 
singleTap.numberOfTapsRequired = 1 

singleTap.require(toFail: doubleTap) 

self.view.addGestureRecognizer(doubletap) 
self.view.addGestureRecognizer(singleTap) 

在代码线singleTap.require(toFail:doubleTap)我们迫使单抽头等待并确保轻拍即使不是双击。这意味着我们要求确保双击事件失败,因此它被认为是单击。

0

通过适当地设定代表就落实UIGestureRecognizer委托方法。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ 
      return YES; 
     } 

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
     return YES; 
    } 

同时添加这行代码

[singleTap requireGestureRecognizerToFail:doubleTap];