首页 文章

Swift 4 - 带AVAudioPlayer的UISlider

提问于
浏览
0

我正在使用AVAudioPlayer播放音频,现在我正在尝试将UISlider用作音频时间轴

@IBOutlet var audioSlider: UISlider!

override func viewDidLoad() {

audioSlider.setValue(0, animated: false)
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: (#selector(PlayerController.updateTimer)), userInfo: nil, repeats: true)

}

@objc func updateTimer() {

        if(audio != nil)
        {

            audioSlider.setValue(Float(Int((self.audio?.currentTime)!)), animated: false)

        }

    }

但是我觉得它不起作用,我的UISlider马上从开始到结束 . 我期望与我的UISlider平稳过渡

以下是我播放音频的方式:

@IBAction func playButtonPressed(_ sender: Any) {

        if(playButton.titleLabel?.text == "Play")
        {

            postPlay(postid: self.postid) { results in

                DispatchQueue.main.async {

                    do {
                        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
                        try AVAudioSession.sharedInstance().setActive(true)
                    }
                    catch {
                    }

                    self.audio?.delegate = self
                    self.audio?.numberOfLoops = 0
                    self.playButton.titleLabel?.text = "Stop"
                    self.audio?.play()
                    self.playCount = self.playCount + 1
                    self.plays.text = "Total Plays: " + self.playCount.description

                }

            }

        }
        else
        {
            playButton.titleLabel?.text = "Resume"
            audio?.stop()
        }

    }

1 回答

  • 1

    UISlider期望值介于0.0和1.0之间 . 要实现此目的,您必须将当前进度除以总时间 .

    For Example

    audioSlider.setValue(Float(self.audio?.currentTime! / self.audio?.duration!), animated: false)
    

相关问题