一个按钮有两个不同的触摸事件

时间:2012-04-19 12:24:11

标签: objective-c ios ios5

我一直在努力实现一个包含两个不同触摸事件的按钮。假设用户点击按钮(触摸短时间),它会触发actionTapped,当用户长时间触摸按钮时触发actionTouched。

This link可能会提出一个想法,但它会让行动一遍又一遍地重复。

4 个答案:

答案 0 :(得分:1)

您希望在touchDown事件上设置一个计时器,该计时器将执行您的longPress功能。在touchUp事件中,您可以取消计时器。真的很简单。

答案 1 :(得分:1)

iOS SDK包含两个完美满足您需求的手势识别器:

  • UITapGestureRecognizer
  • UILongPressGestureRecognizer

创建按钮而不对其添加任何操作。然后创建两个手势识别器,每种类型一个,每个都映射到您想要的操作。然后将手势识别器附加到按钮上。

答案 2 :(得分:0)

我将执行以下操作:

  1. 在您的降落方法中:存储当前时间(让我们称之为touchDownTime)。
  2. 在您的补足方法中:计算time elapsed = current time - touchDownTime

    2.1转换为秒

    2.2如果时间过去>所需的时间做action1(长触摸),否则做action2(短暂触摸)

答案 3 :(得分:0)

好的,这是我的解决方案。 scheduledTimerWithTimeInterval是触及它的最小间隔:

- (IBAction) micButtonTouchedDownAction {
    self.micButtonTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(micButtonAction:) userInfo:nil repeats:YES];
    self.micButtonReleased = FALSE;
}

- (IBAction) micButtonTouchedUpInsideAction {
    self.micButtonReleased = TRUE;
}

- (IBAction) micButtonTouchedUpOutsideAction {
    self.micButtonReleased = TRUE;
}

- (void) micButtonAction:(NSTimer *)timer {
    [self.micButtonTimer invalidate];
    self.micButtonTimer = nil;

    if(self.micButtonReleased) {
        NSLog(@"Tapped");
    }
    else {
        NSLog(@"Touched");
    }
}