UISlider Swift 的 AVPlayer 进度

Posted

技术标签:

【中文标题】UISlider Swift 的 AVPlayer 进度【英文标题】:AVPlayer progress with UISlider Swift 【发布时间】:2016-11-19 16:06:35 【问题描述】:

我正在尝试使用滑块来控制音频并且一切正常,但是当我尝试使滑块值等于播放器当前时间时它崩溃了。 但是,如果我在 updateSlider 函数中打印一些东西,它就会出现并且工作正常。

override func viewDidLoad() 
    
    songTitle.text = mainSongTitle
    background.image = image
    mainImageView.image = image    
    downloadFileFromURL(url: URL(string: previewURL)!)             
    var time = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.updateSlider), userInfo: nil, repeats: true)  
    

func downloadFileFromURL(url : URL)

    var downloadTask = URLSessionDownloadTask()
    downloadTask = URLSession.shared.downloadTask(with: url, completionHandler: 
       
        customURL , response , error in
        self.play(url: customURL!)
        self.slider.maximumValue = Float(player.duration)
    )
    downloadTask.resume()


func play(url : URL)

    do
    
        player = try AVAudioPlayer(contentsOf: url)
        player.prepareToPlay()
        player.play()      
    
    catch 
    
        print(error)
    


@IBAction func PlayPressed(_ sender: Any) 
            
    if player.isPlaying
    
        player.pause()                
    
    else
    
        player.play()
    


@IBAction func ChangerTimePlayer(_ sender: Any) 

    player.stop()
    player.currentTime = TimeInterval(slider.value)
    player.prepareToPlay()
    player.play()


func updateSlider()

    slider.value = Float(player.currentTime)

【问题讨论】:

如果应用程序崩溃,请分享崩溃报告。 【参考方案1】:

也许你应该这样做:

func updateSlider()
    slider.value = Float(player.currentTime/player.duration)

【讨论】:

【参考方案2】:

您的下载完成任务需要在主线程上调用才能安全使用UIKit(您的滑块):

DispatchQueue.main.async 
    self.play(url: customURL!)
    self.slider.maximumValue = Float(player.duration)

【讨论】:

以上是关于UISlider Swift 的 AVPlayer 进度的主要内容,如果未能解决你的问题,请参考以下文章

具有缓冲进度的 UISlider - AVPlayer

UISlider 不能与 AVPlayer 一起正常工作

为 AVPlayer 更新时 UISlider 跳转

AVPlayer seekToTime 不正确使用 UISlider

Objective-c,AVPlayer 中的 UISlider 无法正常工作,在洗涤器之后

ViewController 加载时 UISlider 的 AVPlayer currentTime 更新