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 进度的主要内容,如果未能解决你的问题,请参考以下文章
AVPlayer seekToTime 不正确使用 UISlider