如何在UIButton iOS上区分click和press



我有一个按钮,我用它来记录视频和从相机拍照。

点击我想拍照,按下开始录像。

      [self.recordButton addTarget:self action:@selector(recordTouchCancel:) forControlEvents:UIControlEventTouchCancel];
  [self.recordButton addTarget:self action:@selector(recordTouchDown:) forControlEvents:UIControlEventTouchDown];
  [self.recordButton addTarget:self action:@selector(recordTouchUp:) forControlEvents:UIControlEventTouchUpInside];
  [self.recordButton addTarget:self action:@selector(recordTouchUp:) forControlEvents:UIControlEventTouchUpOutside];

按下记录是完美的,但不能得到点击,我怎么能区分点击和按住UIButton。

有什么建议吗

我想你可能在找UILongPressGestureRecognizer。我注意到API会在点击和长按之间自动触发正确的事件。

看一下Apple文档关于https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UILongPressGestureRecognizer_Class/index.html

有一个例子:

- (void)viewDidLoad {
    // FRIST SET TARGET & SELECTOR TO BUTTON
    UILongPressGestureRecognizer * pressLong =  [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(takeVideo:)];
    [self.recordButton addGestureRecognizer:pressLong];
    [self.recordButton addTarget:self action:@selector(takePicture:) forControlEvents:UIControlEventTouchUpInside];
}

-(void)takePicture:(UIButton*) sender {
    // TAKE PIC
}

-(void)takeVideo : (UILongPressGestureRecognizer*) gesture   {
    NSInteger state = gesture.state;
    switch (state) {
        case UIGestureRecognizerStateChanged: break;
        case UIGestureRecognizerStateBegan:
             //START RECORD
            break;
        case UIGestureRecognizerStateEnded:
             //END RECORD
            break;
    }
}

"UIControlEventTouchDown"one_answers"UIControlEventTouchUpInside"是两个不同的状态。当你开始tab按钮"UIControlEventTouchDown"被调用当你给你的手指"UIControlEventTouchUpInside"被调用。在开始和结束点击之间的时间没有其他状态。所以你不能这样做。

但是你可以尝试"UIControlEventTouchDownRepeat"状态。当用户点击按钮两次时调用。

在你的情况下,最好使用"tapGuesture"

最新更新