gpt4 book ai didi

ios - 使用 Swift 在 AVPlayer 中进行持续时间倒计时的 periodicTimeObserver

转载 作者:可可西里 更新时间:2023-11-01 01:25:33 27 4
gpt4 key购买 nike

我有一个 AVPlayer 的时间观察器,效果很好。我试图让它从音频 0 的持续时间开始倒计时。

它可以工作并且倒计时了,我只是在格式化方面遇到了一些问题。

如果你看到下面的图片,你就会明白我的意思。它从整分钟:秒 3:00 到奇怪的数字 3:-1 等等。

enter image description here enter image description here

知道我做错了什么吗?

这里是定时器的代码:

let interval = CMTime(value: 1, timescale: 1)
self.audioPlayer?.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main, using: { (progressTime) in

let secondsProgress = CMTimeGetSeconds(progressTime)

let secondsStringProgress = String(format: "%02d", Int((secondsProgress.truncatingRemainder(dividingBy: 60))))
let minuitesStringProgress = String(format: "%02d", Int(secondsProgress) / 60)
//self.countDownLabel.text = "\(minuitesStringProgress):\(secondsStringProgress)"

if let duration = self.audioPlayer?.currentItem!.asset.duration {

let secondsDuration = CMTimeGetSeconds(duration)

let secondsStringDuration = String(format: "%02d", Int((secondsDuration.truncatingRemainder(dividingBy: 60))))
let minuitesStringDuration = String(format: "%02d", Int(secondsDuration) / 60)

let secondsString = String(format: "%02d", Int(secondsStringDuration)! - Int(secondsStringProgress)!)
let minuitesString = String(format: "%02d", Int(minuitesStringDuration)! - Int(minuitesStringProgress)!)

self.countDownLabel.isHidden = false
self.countDownLabel.text = "\(minuitesString):\(secondsString)"

self.horizontalSlider.value = Float(secondsProgress / secondsDuration)
self.circleSlider.value = Float(secondsProgress / secondsDuration)

}
})

最佳答案

我用这个函数来显示格式化日期

  func getFormatedTime(FromTime timeDuration:Int) -> String {

let minutes = Int(timeDuration) / 60 % 60
let seconds = Int(timeDuration) % 60
let strDuration = String(format:"%02d:%02d", minutes, seconds)
return strDuration
}

这样使用

        let strDuration = self.getFormatedTime(FromTime: recordingDuration)

或者直接在addPeriodicTimeObserver方法中这样

      recordingDuration = Float(CMTimeGetSeconds((self.playerItem?.asset.duration)!))-Float(CMTimeGetSeconds((self.playerItem?.currentTime())!))

传给getFormatedTime 设置返回值文本

两行代码

关于ios - 使用 Swift 在 AVPlayer 中进行持续时间倒计时的 periodicTimeObserver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41777290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com