我有一个AvAudioPlayer
和UISlider
,目前我可以将currentTime
设置为AvAudioPlayer
的{{1}},如下所示:
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: (#selector(RecordController.updateTimer)), userInfo: nil, repeats: true)
@objc func updateTimer() {
if(audio != nil) {
audioSlider.setValue(Float((self.audio?.currentTime)! / (self.audio?.duration)!), animated: false)
}
}
但是在更改currentTime
的值时如何设置AVAudioPlayer
的{{1}}?
UISlider
答案 0 :(得分:1)
您可以使用AVAudioPlayer的currentTime属性:
@IBAction func audioSliderUpdated(_ sender: Any) {
if let slider = sender as? UISlider {
self.audio?.currentTime = slider.value
}
}
答案 1 :(得分:0)
使用此值,滑块值会根据时间而变化
@IBAction func slide(_ sender: UISlider) {
self.audio.currentTime = TimeInterval(slider.value)
}
答案 2 :(得分:0)
您必须根据媒体文件将滑块值转换为新值。
首先,您必须配置滑块值以使用归一化值(从0.0到1.0)
/// call this on viewDidLoad: configDefaults(for: audioSlider)
func configDefaults(for slider: UISlider)
slider.minimumValue = 0.0
slider.maximumValue = 1.0
}
然后,您应该根据currentTime
和audioSlider.value
计算duration
,然后将其设置为player.currentTime
。
@IBAction func audioSliderUpdated(_ sender: Any) {
guard let slider = sender as? UISlider,
let player = audio else {
return
}
player.currentTime = Double(slider.value) * player.duration
}