CNLivePlayerBottomNaviView.swift 5.66 KB
//
//  CNLivePlayerBottomNaviView.swift
//  metaCode
//
//  Created by zx on 2023/11/24.
//

import Foundation

//点击播放回调
typealias clickPlayBtnCallBackBlock = () -> Void
//进度条滑动中回调
typealias changeSliderValueCallBackBlock = (_ value:CGFloat) -> Void
//进度条结束滑动回调
typealias endChangeSliderValueCallBackBlock = (_ value:CGFloat) -> Void
//点击横竖屏切换按钮回调
typealias clickFrameBtnCallBackBlock = () -> Void


class CNLivePlayerBottomNaviView:UIView{
    
    // MARK: - UI
    /// 阴影背景
    var bgGradientView:CNLiveGradientView?
    /// 播放暂停按钮
    var playBtn:UIButton?
    /// 播放暂停按钮图片
    var playImageView:UIImageView?
    /// 时间
    var timeLab:UILabel?
    /// 横竖屏切换按钮
    var frameBtn:UIButton?
    /// 横竖屏切换按钮图片
    var frameImageView:UIImageView?
    /// 滑动进度条
    var progressSlider:CNLivePlayerProgressSlider?

    // MARK: - 属性
    /// 是否是横屏
    var _isLandscape:Bool = false
    var isLandscape:Bool?{
        get{
            _isLandscape
        }
        set{
            _isLandscape = newValue!
            if _isLandscape{
                self.frameImageView?.image = UIImage(named: "DS_player_reduce")
            }else{
                self.frameImageView?.image = UIImage(named: "DS_player_magnify")
            }
        }
    }
    
    /// 时间格式
    var _timeStyle:CNLivePlayerBottomTimeStyle = .HH_MM_SS
    var timeStyle:CNLivePlayerBottomTimeStyle{
        get {
            _timeStyle
        }
        set{
            _timeStyle = newValue
            var timeWidth:CGFloat = 0
            if _timeStyle == .MM_SS{
                timeWidth = 80
            }else{
                timeWidth = 110
            }
            self.timeLab?.frame = CGRect(x: self.frameBtn!.left-timeWidth-5, y: 0, width: timeWidth, height: 44)
            let leftMargin = self.playBtn!.right+5
            let rightMargin = self.width-self.timeLab!.left+15
            self.progressSlider?.frame = CGRect(x: self.playBtn!.right+5, y: 0, width: self.width-leftMargin-rightMargin, height: 44)
        }
    }

    // MARK: - 回调
    /// 点击播放回调
    var clickPlayBtnCallBack:clickPlayBtnCallBackBlock?
    /// 进度条滑动中回调
    var changeSliderValueCallBack:changeSliderValueCallBackBlock?
    /// 进度条结束滑动回调
    var endChangeSliderValueCallBack:endChangeSliderValueCallBackBlock?
    /// 点击横竖屏切换按钮回调
    var clickFrameBtnCallBack:clickFrameBtnCallBackBlock?
    
    
    // MARK: - init
    init() {
        super.init(frame: CGRectZero)
        self.clipsToBounds = false
        self.initUI()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        self.bgGradientView?.frame = CGRect(x: 0, y: 0, width: self.width, height: self.height)
        self.playBtn?.frame = CGRect(x: self.isLandscape! ? KStatusBarHeight : 5, y: 0, width: 44, height: 44)
        self.playImageView?.frame = CGRect(x: (self.playBtn!.width-22)/2, y: (self.playBtn!.height-22)/2, width: 22, height: 22)
        self.frameBtn?.frame = CGRect(x: self.width-44-(self.isLandscape! ? KTabBarHeight-KTabBar_UIHeight : 0), y: 0, width: 44, height: 44)
        self.frameImageView?.frame = CGRect(x: (self.frameBtn!.height-22)/2, y: (self.frameBtn!.height-22)/2, width: 22, height: 22)
        self.timeStyle = self.timeStyle
    }

    // MARK: - initUI
    func initUI(){
        self.bgGradientView = CNLiveGradientView(frame: CGRectZero)
        self.bgGradientView!.colors = [UIColor(white: 0, alpha: 0.4),UIColor(white: 0, alpha: 0)]
        self.bgGradientView!.startPoint = CGPoint(x: 0.5, y: 1)
        self.bgGradientView!.endPoint = CGPoint(x: 0.5, y: 0)
        self.bgGradientView!.opacity = 1
        self.addSubview(self.bgGradientView!)
        
        self.playBtn = UIButton(type: .custom)
        self.playBtn?.addTarget(self, action: #selector(playBtnClick), for: .touchUpInside)
        self.addSubview(self.playBtn!)
        
        self.playImageView = UIImageView()
        self.playImageView!.image = UIImage(named: "DS_player_start")
        self.playImageView!.clipsToBounds = true
        self.playImageView!.contentMode = .scaleAspectFit
        self.playBtn?.addSubview(self.playImageView!)
        
        self.frameBtn = UIButton(type: .custom)
        self.frameBtn?.addTarget(self, action: #selector(frameBtnClick), for: .touchUpInside)
        self.addSubview(self.frameBtn!)
        
        self.frameImageView = UIImageView()
        self.frameImageView?.image = UIImage(named: "DS_player_magnify")
        self.frameImageView?.clipsToBounds = true
        self.frameImageView?.contentMode = .scaleAspectFit
        self.frameBtn?.addSubview(self.frameImageView!)
        
        self.timeLab = UILabel()
        self.timeLab?.textColor = .white
        self.timeLab?.font = Font_12
        self.timeLab?.textAlignment = .center
        self.timeLab?.text = "00:00/00:00"
        self.addSubview(self.timeLab!)
        
        self.progressSlider = CNLivePlayerProgressSlider()
        self.progressSlider?.changeSliderValueCallBack = {[weak self] value in
            self?.changeSliderValueCallBack!(value)
        }
        self.progressSlider?.endChangeSliderValueCallBack = {
            [weak self] value in
            self?.endChangeSliderValueCallBack!(value)
        }
        self.addSubview(self.progressSlider!)
    }

    // MARK: - 触发事件
    @objc func playBtnClick(){
        self.clickPlayBtnCallBack!()
    }
    @objc func frameBtnClick(){
        self.clickFrameBtnCallBack!()
    }
}