2016-11-15 8 views
0

Я использую JSQMessagesViewController для реализации чата. Я добавил кнопку записи и хочу отправить аудио сообщения, удерживая эту кнопку нажатой, чтобы записать и остановить запись, отпустив кнопку. В настоящее время я пытаюсь сделать это следующим образом:Событие TouchDown UIbutton для записи Аудио не запускается из-за Collectionview

record_button = UIButton(type: UIButtonType.custom) 
    record_button.tintColor = UIColor.white 
    record_button.setImage(recordImage, for: .normal) 

    self.recordingSession = AVAudioSession.sharedInstance() 

    do { 
     try self.recordingSession.setCategory(AVAudioSessionCategoryPlayAndRecord) 
     try self.recordingSession.setActive(true) 
     self.recordingSession.requestRecordPermission() { [unowned self] allowed in 
      DispatchQueue.main.async { 
       if allowed { 
        self.record_button.addTarget(self, action: #selector(ChatViewController.recording), for: .touchDown) 
        self.record_button.addTarget(self, action: #selector(ChatViewController.recordTapRelease), for: .touchUpInside) 
        self.record_button.addTarget(self, action: #selector(ChatViewController.recordTapRelease), for: .touchDragExit) 
       } else { 
        // failed to record! 
       } 
      } 
     } 
    } catch { 
     // failed to record! 
    } 

К сожалению, это не работает правильно. Он работает только тогда, когда я нажимаю кнопку вверх. Только тогда он распознает событие и записи. Когда я касаюсь и держусь в том же месте, он не записывается, и когда я отпускаю прикосновение, он отправляет звуковое сообщение в течение 1 секунды.

EDIT я понял, что проблема моя CollectionView которая имеет Scrollview. Функция scrollview задерживает событие приземления, чтобы проверить, прокручивается ли пользователь. Как я могу спровоцировать событие приземления?

ChatViewController

ответ

0

Ну, вы можете использовать вместо жестов распознавателей.

let gesture = UILongPressGestureRecognizer(target: self, action: #selector(longTouched)) 
button.addGestureRecognizer(gesture) 

func longTouched(gesture: UIGestureRecognizer) { 
    if gesture.state == .began { 
     //triggered after long pressed 
    }else if gesture.state == .ended || gesture.state == .cancelled { 
     //end of the touch 
    } 
} 

Если вам нужно определить начало прикосновения, вы можете также добавить UITapGestureRecognizer к кнопке. В этом случае вы можете:

tapGesture.numberOfTapsRequired = 1 
+0

Пробовал это раньше и не имел никакого успеха. –

+0

Ну, мне понравилось это в моем проекте, и это работает :) не может открыть полные источники. – Mikael

+0

Проблема для меня - это контроллер scrollView. Проверьте мое редактирование. –

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

  • Нет связанных вопросов^_^