【问题标题】:Slider Scrubbing not very smooth滑块擦洗不是很顺畅
【发布时间】:2017-01-20 00:45:48
【问题描述】:

我正在尝试为 AVPlayer 实现一个滑块来显示音频文件的长度并允许用户向前和向后滑动。

我已经让它工作得很好,但是当你移动滑块旋钮时,它会恢复到原始位置一秒钟,然后向前跳到你移动到的位置并再次开始播放。

有没有办法阻止这种闪烁?我可能对代码做了一些愚蠢的事情。

这是我的滑块块:

@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

【问题讨论】:

    标签: ios swift timer avplayer uislider


    【解决方案1】:

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

    默认设置如下:

    您需要将它们设置为 0...播放声音的长度,或者以相对单位 0...1 输入时间,如果您还没有这样做的话。

    【讨论】:

    • 我正在设置播放音频的最长时间,请将此添加到问题中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 2019-04-05
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    相关资源
    最近更新 更多