2016-11-19 32 views
0

我想用滑块来控制音频和一切工作正常,但是当我尝试使滑块值等于玩家当前时间崩溃。
但是,如果我打印updateSlider函数内的东西,它会显示并正常工作。AVPlayer进展与UISlider Swift

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) 
} 
+0

万一的应用程序崩溃确实共享崩溃报告。 – Adeel

回答

0

也许你应该这样做:

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

你下载完成的任务需要被称为主线程安全使用UIKit(你的滑块):

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