AVPlayer currentTime update for a UISlider when ViewController load

。_饼干妹妹 提交于 2019-12-03 12:50:41

You should not use a timer for this, AVPlayer provides an API you observe the time.

Register an observer (e.g. in viewWillAppear) like this:

CMTime interval = CMTimeMakeWithSeconds(1.0, NSEC_PER_SEC); // 1 second
self.playbackTimeObserver =
    [self.player addPeriodicTimeObserverForInterval:interval 
                                              queue:NULL usingBlock:^(CMTime time) {
    // update slider value here...
}];

To unregister the observer (e.g. in viewDidDisappear), do:

[self.player removeTimeObserver:self.playbackTimeObserver];

Hope that helps.

Swift 3 version.

Register an observer:

// Invoke callback every second
let interval = CMTime(seconds:1.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC))

// Queue on which to invoke the callback
let mainQueue = DispatchQueue.main

// Keep the reference to remove
self.playerObserver = player.addPeriodicTimeObserver(forInterval: interval, queue: mainQueue) { time in
    print(time)
}

Remove an obserber:

if let observer = self.playerObserver {
    self.player.removeTimeObserver(observer)
    self.playerObserver = nil
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!