CNLiveShortVideoControlView.swift 3.56 KB
//
//  CNLiveShortVideoControlView.swift
//  metaCode
//
//  Created by open on 2024/1/5.
//

import Foundation
import ZFPlayer
import Kingfisher
class CNLiveShortVideoControlView: UIView, ZFPlayerMediaControl {
    
    weak var player: ZFPlayerController?
    
    lazy var playBtn: UIButton = {
        let button = UIButton(type: .custom)
        button.isUserInteractionEnabled = false
        button.setImage(UIImage(named: "short_video_play"), for: .normal)
        return button
    }()

    lazy var sliderView: ZFSliderView = {
        let sliderView = ZFSliderView()
        sliderView.maximumTrackTintColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0.2)
        sliderView.minimumTrackTintColor = UIColor.white
        sliderView.bufferTrackTintColor = UIColor.lightGray
        sliderView.sliderHeight = 1
        sliderView.isHideSliderBlock = false
        return sliderView
    }()

    
    override init(frame: CGRect) {
        super.init(frame: frame)
        addSubview(playBtn)
        addSubview(sliderView)
    }
    
    deinit {
        print("控制界面销毁了")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        var min_x: CGFloat = 0
        var min_y: CGFloat = 0
        var min_w: CGFloat = 0
        var min_h: CGFloat = 0
        let min_view_w = self.zf_width
        let min_view_h = self.zf_height

        min_w = 100
        min_h = 100
        self.playBtn.frame = CGRect(x: min_x, y: min_y, width: min_w, height: min_h)
        self.playBtn.center = self.center

        min_x = 20
        min_y = min_view_h - (60 + get_system_tabbar_ui_offsetHeight())
        min_w = min_view_w - 40
        min_h = 1
        self.sliderView.frame = CGRect(x: min_x, y: min_y, width: min_w, height: min_h)
    }
    
    public func resetControlView() {
        self.playBtn.isHidden = true
        self.sliderView.value = 0
        self.sliderView.bufferValue = 0
    }
        
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func videoPlayer(_ videoPlayer: ZFPlayerController, loadStateChanged state: ZFPlayerLoadState) {
        if (state == .stalled || state == .prepare) && videoPlayer.currentPlayerManager.isPlaying {
            self.sliderView.startAnimating()
        } else {
            self.sliderView.stopAnimating()
        }
    }

    func videoPlayer(_ videoPlayer: ZFPlayerController, currentTime: TimeInterval, totalTime: TimeInterval) {
        self.sliderView.value = videoPlayer.progress
    }

    func videoPlayer(_ videoPlayer: ZFPlayerController, bufferTime: TimeInterval) {
        self.sliderView.bufferValue = videoPlayer.bufferProgress
    }

    func gestureSingleTapped(_ gestureControl: ZFPlayerGestureControl) {
        if (self.player?.currentPlayerManager.isPlaying == true) {
            self.player?.currentPlayerManager.pause()
            self.playBtn.isHidden = false
            self.playBtn.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
            UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseIn, animations: { [weak self] in
                guard let self = self else { return }
                self.playBtn.transform = .identity
            }, completion: nil)
        } else {
            self.player?.currentPlayerManager.play()
            self.playBtn.isHidden = true
        }
    }

    func showCoverView(withUrl coverUrl: String) {
        self.player?.currentPlayerManager.view.coverImageView.kf.setImage(with: URL(string: coverUrl), placeholder: UIImage.imageWithColor(color: UIColor.black, size: UIScreen.main.bounds.size))
    }
}