Ios 如何使用swift使用进度条显示AVAudioPlayer?

Ios 如何使用swift使用进度条显示AVAudioPlayer?,ios,swift,avaudioplayer,uiprogressbar,Ios,Swift,Avaudioplayer,Uiprogressbar,我正在使用AVAudioPlayer播放一首歌曲。我需要一个进度条来显示歌曲的进度 我的问题是进度条的进度不正常。在2-3秒内,它完成了它的进程 func playMusic() { do { player = try AVAudioPlayer(contentsOf: (currentSong?.mediaURL)!) guard let player = player else { return } player.prepareTo

我正在使用
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
}
问题在于:

let normalizedTime = Float(self.player?.currentTime as! Double * 100.0 / (self.player?.duration as! Double) )
使用此选项,您将获得一个介于
0.0
100.0
之间的值,但根据
UIProgressView
文档,
进度必须介于
0.0
1.0
之间。试一试

let normalizedTime = Float(self.player?.currentTime as! Double / (self.player?.duration as! Double) )

我认为您没有正确使用
CADisplayLink
。该类应用于在绘制UI时更新逻辑,而不是在逻辑更改时更新UI。尝试改用常规计时器,间隔为0.05秒。
CADisplayLink
不允许浮点值。我的意思是你应该尝试常规的
NSTimer