swiftAVPlayerLayer视频进度条如何操作
要操作AVPlayerLayer视频进度条,需要使用AVPlayer来管理视频的播放进度。下面是一个示例代码,展示了如何使用UISlider来控制AVPlayer的播放进度:
首先,创建一个AVPlayer实例并将其与AVPlayerLayer关联起来:
import AVFoundation
import AVKit
class ViewController: UIViewController {
var player: AVPlayer?
var playerLayer: AVPlayerLayer?
override func viewDidLoad() {
super.viewDidLoad()
// 创建AVPlayer实例
guard let videoURL = Bundle.main.url(forResource: "video", withExtension: "mp4") else {
return
}
player = AVPlayer(url: videoURL)
// 创建AVPlayerLayer并将其添加到视图中
playerLayer = AVPlayerLayer(player: player)
playerLayer?.frame = view.bounds
view.layer.addSublayer(playerLayer!)
// 监听播放进度
player?.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 1), queue: .main) { [weak self] time in
self?.updateSliderValue()
}
}
}
然后,创建一个UISlider来表示视频播放进度,并在用户拖动滑块时更新AVPlayer的播放进度:
class ViewController: UIViewController {
// ...
@IBOutlet weak var slider: UISlider!
override func viewDidLoad() {
super.viewDidLoad()
// ...
// 设置滑块的最小值和最大值
slider.minimumValue = 0
slider.maximumValue = Float(player?.currentItem?.duration.seconds ?? 0)
// 监听滑块值的改变
slider.addTarget(self, action: #selector(sliderValueChanged(_:)), for: .valueChanged)
}
@objc func sliderValueChanged(_ sender: UISlider) {
// 更新AVPlayer的播放进度
let time = CMTime(seconds: Double(sender.value), preferredTimescale: 1)
player?.seek(to: time)
}
func updateSliderValue() {
// 更新滑块的值
slider.value = Float(player?.currentTime().seconds ?? 0)
}
}
这样,当AVPlayer播放视频时,滑块的值会随着视频的播放进度进行更新,同时用户也可以通过拖动滑块来调整视频的播放进度
原文地址: http://www.cveoy.top/t/topic/h9Ik 著作权归作者所有。请勿转载和采集!