【问题标题】:Swift 4 - AVAudioPlayer set currentTime from UISliderSwift 4 - AVAudioPlayer 从 UISlider 设置 currentTime
【发布时间】:2018-07-10 02:38:44
【问题描述】:

我有一个UISliderAvAudioPlayer,目前我可以将UISlider 设置为currentTimecurrentTime,如下所示:

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

【问题讨论】:

标签: ios swift avaudioplayer


【解决方案1】:

您可以使用 AVAudioPlayer 的 currentTime 属性:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      首先,您必须将滑块值配置为标准化值(从 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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-08
        • 2019-04-28
        • 1970-01-01
        • 2014-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多