【发布时间】:2016-12-07 00:12:15
【问题描述】:
我有一个包含三个按钮的视图。
一个按钮开始录制音频,另一个按钮停止录制音频,第三个按钮播放录制的音频。
我想将记录开始和停止压缩成一个按钮,这样当按下它时它会记录,但当释放它时它会停止记录。
我尝试通过在一个按钮上使用两个事件来开始录制,然后在内部触摸以停止录制,但它似乎无法正常工作。
【问题讨论】:
标签: ios xcode touch avfoundation avaudiorecorder
我有一个包含三个按钮的视图。
一个按钮开始录制音频,另一个按钮停止录制音频,第三个按钮播放录制的音频。
我想将记录开始和停止压缩成一个按钮,这样当按下它时它会记录,但当释放它时它会停止记录。
我尝试通过在一个按钮上使用两个事件来开始录制,然后在内部触摸以停止录制,但它似乎无法正常工作。
【问题讨论】:
标签: ios xcode touch avfoundation avaudiorecorder
您应该创建一个视图并将其设置为您想要的按钮,而不是使用 UIButton。
然后依靠触摸开始和结束方法来提供您想要的功能。
在这种特殊情况下,我创建了一个您可以使用的自定义视图类。
以下代码适用于 Swift 3.0:
class TouchView : UIView {
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
// Start recording
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
// End recording
}
}
【讨论】:
使用已附加UILongPressGestureRecognizer 的 UIButton。当识别器确定用户在视图上按住手指时,您会收到 .began 消息,而当手指抬起时,您会收到 .ended 消息。设置按钮的isSelected 表示“向下”状态:
@IBAction func doPress(_ sender: UILongPressGestureRecognizer) {
switch sender.state {
case .began:
(sender.view as! UIControl).isSelected = true
// start recording
case .ended:
(sender.view as! UIControl).isSelected = false
// stop recording
default: break
}
}
【讨论】: