我试图为我的聊天实现一个记录按钮,只要按住按钮就会记录。我实现了longpressGestureRecognizer,但不幸的是它只记录了一秒钟,无论我按多久。
以下是代码:
let longPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(longPress(_:)))
longPressGestureRecognizer.minimumPressDuration = 1
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.addGestureRecognizer(longPressGestureRecognizer)
} else {
// failed to record!
}
}
}
} catch {
// failed to record!
}
// Gesture Recognizer for the Record Button, so as long as it is pressed, record!
func longPress(_ longPressGestureRecognizer: UILongPressGestureRecognizer){
if longPressGestureRecognizer.state == .ended {
print("long press ended")
let recordImage = UIImage(named: "ic_mic_white")
record_button.setImage(recordImage, for: .normal)
self.recordTapRelease()
}
if longPressGestureRecognizer.state == .began {
let recordingTapImage = UIImage(named: "ic_mic_none_white")
record_button.setImage(recordingTapImage, for: .normal)
self.recording()
}
}
修改 我实现了.touchdown .touchupinside事件等。 我仍然会得到相同的行为,除非我略微高于记录按钮而离开橙色视图。然后录制图像按钮图像也会改变,显示录制,如果我释放并进一步向上移动则停止录制。
答案 0 :(得分:0)
您甚至不必为实现此目的而创建UILongPressGestureRecognizer
;您可以通过为UIButton实施touchDown
,touchUpInside
和touchDragExit
事件来实现此目的。
初看起来,它似乎比使用UILongPressGestureRecognizer
更复杂,但我认为它更合乎逻辑,更具可读性。
按照this answer中的步骤操作,希望您的录制按钮可以获得所需的行为。如果您坚持使用UILongPressGestureRecognizer
,它还有另一个答案。
希望这会有所帮助。