CNLivePlayerBottomNaviView.swift
5.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
//
// 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!()
}
}