首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按下按键时,UILongPressGestureRecognizer被调用两次

按下按键时,UILongPressGestureRecognizer被调用两次
EN

Stack Overflow用户
提问于 2010-07-23 23:21:09
回答 4查看 92.9K关注 0票数 375

我正在检测用户是否按下了2秒:

代码语言:javascript
复制
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
                                             initWithTarget:self 
                                             action:@selector(handleLongPress:)];
        longPress.minimumPressDuration = 2.0;
        [self addGestureRecognizer:longPress];
        [longPress release];

这就是我如何处理长时间的新闻:

代码语言:javascript
复制
-(void)handleLongPress:(UILongPressGestureRecognizer*)recognizer{
    NSLog(@"double oo");
}

当我按下超过2秒时,文本"double oo“被打印两次。为什么会这样呢?我该怎么修复呢?

EN

回答 4

Stack Overflow用户

发布于 2010-11-11 23:43:18

要检查选择器的状态,只需在UILongPressGestureRecognizer方法上添加一条if语句:

代码语言:javascript
复制
- (void)handleLongPress:(UILongPressGestureRecognizer *)sender {    
    if (sender.state == UIGestureRecognizerStateEnded) {
        NSLog(@"Long press Ended");
    } else if (sender.state == UIGestureRecognizerStateBegan) {
        NSLog(@"Long press detected.");
    }
}
票数 119
EN

Stack Overflow用户

发布于 2011-08-19 04:55:26

您需要检查正确的状态,因为每个状态都有不同的行为。最有可能的情况是,您将需要UILongPressGestureRecognizerUIGestureRecognizerStateBegan状态。

代码语言:javascript
复制
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
                                             initWithTarget:self 
                                             action:@selector(handleLongPress:)];
longPress.minimumPressDuration = 1.0;
[myView addGestureRecognizer:longPress];
[longPress release];

..。

代码语言:javascript
复制
- (void)handleLongPress:(UILongPressGestureRecognizer *)gesture {
    if(UIGestureRecognizerStateBegan == gesture.state) {
        // Called on start of gesture, do work here
    }

    if(UIGestureRecognizerStateChanged == gesture.state) {
        // Do repeated work here (repeats continuously) while finger is down
    }

    if(UIGestureRecognizerStateEnded == gesture.state) {
        // Do end work here when finger is lifted
    }
}
票数 76
EN

Stack Overflow用户

发布于 2016-11-26 20:49:53

Swift 3.0:

代码语言:javascript
复制
func handleLongPress(sender: UILongPressGestureRecognizer) {

    if sender.state == .ended {
        print("Long press Ended")
    } else if sender.state == .began {
        print("Long press detected")
    }
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3319591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档