要操作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播放视频时,滑块的值会随着视频的播放进度进行更新,同时用户也可以通过拖动滑块来调整视频的播放进度

swiftAVPlayerLayer视频进度条如何操作

原文地址: http://www.cveoy.top/t/topic/h9Ik 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录