【问题标题】:UIGesture recognizer, differentiate between single and double tap.UIGesture 识别器,区分单击和双击。
【发布时间】:2012-12-15 03:45:32
【问题描述】:

我正在使用下面的代码将两个手势识别器添加到视图中。我想要的是:如果用户一旦发生一件事就点击。如果他们点击两次,就会发生另一件事。

事实上,无论用户点击一次还是两次,都会发生单击操作。换句话说,当我双击时,我得到了两个动作,而不是我喜欢的一个动作

区分

//gesture recognizer.
UITapGestureRecognizer *tapRecognizerShowHideMenu = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doOneThing)];
[tapRecognizerShowHideMenu setDelegate:self];
[tapRecognizerShowHideMenu setNumberOfTapsRequired:1];
[self.view addGestureRecognizer:tapRecognizerShowHideMenu];

UITapGestureRecognizer *tapRecognizerEditEffect = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doAnotherThing)];
[tapRecognizerEditEffect setDelegate:self];
[tapRecognizerEditEffect setNumberOfTapsRequired:2];
[self.view addGestureRecognizer:tapRecognizerEditEffect];

【问题讨论】:

    标签: iphone ios uigesturerecognizer xcode4.5


    【解决方案1】:

    将此添加到您的代码中:

    [tapRecognizerShowHideMenu requireGestureRecognizerToFail:tapRecognizerEditEffect];
    

    当您为手势识别器设置 requireGestureRecognizerToFail: 时,您是在说它应该只在其他手势识别器没有识别的情况下识别手势。所以在这里,你告诉单击只有在双击不被识别时才被识别。

    【讨论】:

    • 但在这种情况下我认为我们应该更改参数
    • 也许吧,但如果应用程序直观且易于使用,让两个手势识别器都以这种方式工作并没有错。这取决于提问者的应用做什么。
    • 这当然可以,谢谢。奇怪的是,它引入了非常明显的延迟(例如 0.25 秒)。
    • 这是双击手势识别器失败的时间。等待第二次点击是否即将到来。
    • 这是另一种实现点按和双击不暂停的方法,它更高级一点,不使用手势识别器:stackoverflow.com/questions/8051627/…
    【解决方案2】:

    我认为以下链接可能对您有所帮助,您可以通过覆盖触摸事件处理程序或使用手势识别器来实现。

    http://www.cimgf.com/2010/06/14/differentiating-tap-counts-on-ios/

    【讨论】:

      【解决方案3】:

      这似乎工作得很好,根据 Anton 在上面的评论中给出的链接进行了修改。

      How to recognize oneTap/doubleTap at moment?

      - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
          UITouch *touch = [touches anyObject];
          if (touch.tapCount == 1) {
      
              [self performSelector:@selector(showHideMenu) withObject:nil afterDelay:0.15];
      
          } else if (touch.tapCount == 2) {
      
              [self performSelector:@selector(editEffect) withObject:nil afterDelay:0];
          }
      }
      

      【讨论】:

        【解决方案4】:

        也许使用长按手势识别器而不是双击手势识别器会更有用。然后你就不会有这样的冲突了

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-29
          • 2015-04-09
          • 1970-01-01
          • 2011-09-13
          相关资源
          最近更新 更多