2017-01-20 37 views
0

我想实现一个AVPlayer的滑块来显示音频文件的长度,并允许用户向前和向后擦洗。Slider Scrubbing不是很顺利

我已经使用了它,但是当您移动滑块旋钮时,它会恢复到原始位置一秒钟,然后跳转到您将其移动到的位置并再次开始播放。

有没有办法阻止这种轻弹?我可能在代码上做了一些愚蠢的事情。

这是我的滑块:

@IBAction func horizontalSliderActioned(_ sender: Any) { 

    audioPlayer?.pause() 
     //self.timer?.invalidate() 

    //create a CMTime the slider value 
    let seconds : Int64 = Int64(horizontalSlider.value) 
     let preferredTimeScale : Int32 = 1 
      let seekTime : CMTime = CMTimeMake(seconds, preferredTimeScale) 
       audioPlayerItem?.seek(to: seekTime) 

    audioPlayer?.play() 
     //self.timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(PlayerViewController.audioSliderUpdate), userInfo: nil, repeats: true) 
} 

我使用一个计时器,所以我用无效,然后重新创建打不过它没有做任何事情。

这是定时器块:

func audioSliderUpdate() { 

    let currentTime : CMTime = (self.audioPlayerItem?.currentTime())! 
    let seconds : Float64 = CMTimeGetSeconds(currentTime) 
    let time : Float = Float(seconds) 

    self.horizontalSlider.value = time 


} 

这是由定时器,其中所述音频开始播放称为:

self.timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(PlayerViewController.audioSliderUpdate), userInfo: nil, repeats: true) 

最大时间是从时间设置在音频播放:

let duration : CMTime = (self.audioPlayer?.currentItem!.asset.duration)! 
    let seconds : Float64 = CMTimeGetSeconds(duration) 
    let maxTime : Float = Float(seconds) 

    self.horizontalSlider.maximumValue = maxTime 

回答

0

我认为您的滑块范围未设置为可以通过分配time它。

的默认设置是这样的:enter image description here

你需要将它们设置为0 ...播放的声音的长度或相对单位0输入时间...... 1,如果您尚未。

+0

我正在设置音频播放的最大时间,生病添加到这个问题 – Pippo