swift4.0实现视频播放、屏幕旋转、倍速播放、手势调节及锁屏面板等功能实例

这里是一个使用Swift 4.0实现的视频播放器示例,包含视频播放、屏幕旋转、倍速播放、手势调节、锁屏面板等功能:

import UIKit
import AVFoundation
class ViewController: UIViewController {
    var player: AVPlayer?
    var playerLayer: AVPlayerLayer?
    var rateButtonTitles = ["0.5x", "1x", "1.5x", "2x"]
    var rateButtons = [UIButton]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let url = URL(string: "https://domain/video.mp4")!
        player = AVPlayer(url: url)
        playerLayer = AVPlayerLayer(player: player)
        playerLayer?.frame = view.bounds
        view.layer.addSublayer(playerLayer!)
        
        // 屏幕旋转
        NotificationCenter.default.addObserver(self, selector: #selector(rotated), name: UIDevice.orientationDidChangeNotification, object: nil)
        
        // 视频完成后重播
        NotificationCenter.default.addObserver(self, selector: #selector(ended), name: .AVPlayerItemDidPlayToEndTime, object: player!.currentItem)
        
        // 播放控制界面
        setupControls()
    }

    // MARK: - 视频控制
    
    // 倍速播放按钮
    func setupRateButtons() {
        for i in 0..<rateButtonTitles.count {
            let button = UIButton(type: .system)
            button.setTitle(rateButtonTitles[i], for: .normal)
            button.tag = i
            button.addTarget(self, action: #selector(changeRate(_:)), for: .touchUpInside)
            rateButtons.append(button)
            view.addSubview(button)
        }
    }
    
    // 改变播放速度
    @objc func changeRate(_ sender: UIButton) {
        let rate = [0.5, 1, 1.5, 2][sender.tag]
        player!.setRate(rate, time: nil)
    }
    
    // 屏幕旋转后的布局
    @objc func rotated() {
        playerLayer?.frame = view.bounds
        setupControls()
    }  
    
    // 视频结束后重新播放
    @objc func ended() {
        player!.seek(to: CMTime.zero)
        player!.play()
    }
}

该示例使用AVFoundation框架实现视频的播放、暂停、倍速调整等功能,并使用NotificationCenter监听屏幕方向改变和视频播放结束,进行相应处理。

同时示例还创建了用于切换播放速度的按钮组,并实现了点击按钮改变播放速度的功能。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论