如何使用 swift 显示带有进度条的 AVAudioPlayer?
Posted
技术标签:
【中文标题】如何使用 swift 显示带有进度条的 AVAudioPlayer?【英文标题】:How to AVAudioPlayer with progress bar show using swift? 【发布时间】:2019-01-24 13:26:17 【问题描述】:我正在使用AVAudioPlayer
播放歌曲。我需要一个进度条来显示歌曲的进度。
我的问题是进度条的进度无法正常工作。在 2-3 秒内,它完成了进度。
func playMusic()
do
player = try AVAudioPlayer(contentsOf: (currentSong?.mediaURL)!)
guard let player = player else return
player.prepareToPlay()
player.play()
updater = CADisplayLink(target: self, selector: #selector(self.musicProgress))
updater.frameInterval = 1
updater.add(to: RunLoop.current, forMode: RunLoop.Mode.common)
playButton.setImage(UIImage.init(named: "pause"), for: .normal)
catch let error as NSError
print(error.description)
@objc func musicProgress()
let normalizedTime = Float(self.player?.currentTime as! Double * 100.0 / (self.player?.duration as! Double) )
self.progressMusic.progress = normalizedTime
【问题讨论】:
【参考方案1】:问题在这里:
let normalizedTime = Float(self.player?.currentTime as! Double * 100.0 / (self.player?.duration as! Double) )
这样您将获得介于0.0
和100.0
之间的值,但根据UIProgressView
文档,progress
必须介于0.0
和1.0
之间。试试
let normalizedTime = Float(self.player?.currentTime as! Double / (self.player?.duration as! Double) )
【讨论】:
我认为您没有正确使用CADisplayLink
。该类应该用于在绘制 UI 时更新逻辑,而不是在逻辑更改时更新 UI。尝试使用常规计时器,间隔为 0.05 秒。
CADisplayLink
不允许浮点值。
我的意思是你应该试试普通的NSTimer
以上是关于如何使用 swift 显示带有进度条的 AVAudioPlayer?的主要内容,如果未能解决你的问题,请参考以下文章