Этот код должен работать для вас, если вы используете AVPlayer, я использую его в одном из моих приложений. Это требует от вас установки длительности воспроизводимого в данный момент элемента. Вы можете поиграть со свойством interval
, чтобы настроить частоту выполнения этого метода (что изменит плавность изменения progressView)
let duration = playerItem.duration //set duration of currently playing item
let interval = CMTimeMake(1, 1)
player?.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main, using: { [weak self] time in
let totalDurationSeconds = CMTimeGetSeconds((self?.duration)!)
let durationSeconds = CMTimeGetSeconds(time)
let currentProgress = Float(durationSeconds / totalDurationSeconds)
self?.progressView.setProgress(currentProgress, animated: true)
})