我正在使用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 会延迟触地事件,以检查用户是否滚动。我应该如何触发触地得分事件?

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

最佳答案

好了,您可以改用手势识别器。

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/

10-11 22:53
查看更多