由于Collectionview,TouchDown事件UI按钮用于记录未触发的音频

时间:2016-11-15 11:10:28

标签: ios swift audio uibutton audio-recording

我正在使用JSQMessagesViewController来实现聊天。我添加了一个录制按钮,想要通过按下该按钮来发送音频消息,以通过释放按钮来录制和停止录制。 目前我正试图这样做:

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秒的音频消息。

修改 我意识到问题是我的Collectionview有一个ScrollView。 scrollview延迟了触地事件以检查用户是否滚动。我怎么应该触发触地事件呢?

ChatViewController

1 个答案:

答案 0 :(得分: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