iPhone - GestureRecognizer有时候不会开火?

时间:2011-06-22 12:08:13

标签: iphone ios keypress uigesturerecognizer

我正试图用一个长按键按下用于iPhone的目标c中的按钮。

以下是我为GestureRecognizer整理的代码:

    UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
    longPressGesture.minimumPressDuration = 1.0; //1 second
    longPressGesture.delegate = self;
    [deleteButton addGestureRecognizer:longPressGesture];
    [longPressGesture release];

这是我在选择器中使用的功能,当检测到长按键时调用。

-(void)handleLongPress:(UILongPressGestureRecognizer *) gestureRecognizer
{
    if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
        NSLog(@"Got handle long key press");
        NumLabel.text = @"";

    }

}

我还在代理类中添加了以下函数,但它们似乎没有任何影响:

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{

    return YES;
}

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{

    return NO;

}

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{

    return YES;

}

我的问题是,这有时会起作用,但有时它有时也没有,大多数时候我接到了对handleLongPress的调用并且它工作正常,但每当按下按钮并按下按钮时我都得不到任何东西直到我将手指从按钮的哪个阶段抬起,我的正常按钮代码就会运行。

我是否错过了教程中的某些内容,或者有人能够发现为什么它会在某些时候发挥作用但我在其他场合什么也得不到?

修改

我实际上认为问题在于按下按钮的方式,如果我按下按钮并按住它然后它工作正常,但是如果我的手指滑动按钮甚至一点点那么handleLongPress功能是'叫来。

我假设这是因为它将其识别为单独的手势?有没有办法确保只要按下按钮就会调用handleLongPress,即使手指完全按下按钮也是如此?

2 个答案:

答案 0 :(得分:2)

手势识别器仅适用于触控,不适用于按钮状态。长按真的只是紧迫和释放。触摸移动时,手势将被取消!
如果您只是想知道按钮的按下时间是否超过特定时间,您可以处理按钮的TouchDown / TouchCancel事件并添加一些时间。

答案 1 :(得分:0)

是的,我们可以实现手势识别器和按钮。 在这里:

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressButton:)]; [someButtonName addGestureRecognizer:longPress]; longPress.minimumPressDuration = 2.0; //longPress.delegate = self; [longPress release];

在你想要实现它的方法中创建你的按钮的地方使用它。然后

- (void)longPressButton:(UILongPressGestureRecognizer*)gesture { if ( gesture.state == UIGestureRecognizerStateEnded) { NSLog(@"Long Pressed"); //your stuff here when detected long hold } }