我正在使用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秒钟的音频消息。
编辑
我意识到问题出在我的具有ScrollView的Collectionview上。滚动 View 会延迟触地事件,以检查用户是否滚动。我应该如何触发触地得分事件?
最佳答案
好了,您可以改用手势识别器。
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
关于ios - TouchDown事件UI按钮,用于记录由于Collectionview而未触发的音频,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40608349/