2015-09-20 2 views
1

У меня есть одна кнопка, которую я использую для записи видео и фотографирования с камеры.как дифференцировать щелчок и нажать на UIButton iOS

По щелчку Я хочу сделать снимок и начать запись видео с начала.

 [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.

Любые предложения?

ответ

3

Я думаю, что вы могли бы искали UILongPressGestureRecognizer. Я заметил, что API автоматически запускает правильное событие между краном и длительным нажатием.

Посмотрите на Apple, документ о https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UILongPressGestureRecognizer_Class/index.html

Существует Exemple:

- (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; 
    } 

} 
0

«UIControlEventTouchDown» и «UIControlEventTouchUpInside» - это два разных состояния. при нажатии кнопки «UIControlEventTouchDown» вызывается, и когда вы даете вам палец, вызывается «UIControlEventTouchUpInside». Время между началом и концом вашего крана не существует другого состояния. Таким образом, вы не можете сделать это.

Но вы можете попробовать "UIControlEventTouchDownRepeat". это вызывается, когда пользователь дважды нажимает кнопку.

В вас ситуации лучше использовать «tapGuesture»

Смежные вопросы