Swift 4 - AVAudioPlayer 从 UISlider 设置 currentTime

Swift 4 - AVAudioPlayer set currentTime from UISlider

我有一个 UISliderAvAudioPlayer,目前我可以像这样将 UISlider 设置为 AvAudioPlayercurrentTime

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)
    }
}

但是在更改 UISlider 的值时,如何设置 AVAudioPlayercurrentTime

@IBAction func audioSliderUpdated(_ sender: Any) {
}

可以使用AVAudioPlayer的currentTime属性:

@IBAction func audioSliderUpdated(_ sender: Any) {
  if let slider = sender as? UISlider {
    self.audio?.currentTime = slider.value    
  }
}

使用这个,滑块值随时间变化

 @IBAction func slide(_ sender: UISlider) {
    self.audio.currentTime = TimeInterval(slider.value)
}

您必须将滑块值转换为基于媒体文件的新值。

首先,您必须配置滑块值以使用标准化值(从 0.0 到 1.0)

/// call this on viewDidLoad: configDefaults(for: audioSlider)
func configDefaults(for slider: UISlider)
    slider.minimumValue = 0.0
    slider.maximumValue = 1.0
}

那么你应该从 audioSlider.valueduration 计算出 currentTime 然后将其设置为 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
}