CNLivePlayerGestureView.swift
4.99 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
//
// CNLivePlayerGestureView.swift
// metaCode
//
// Created by zx on 2023/11/24.
//
import Foundation
protocol CNLivePlayerGestureViewDelegate:NSObjectProtocol{
/// 单点
/// @param gestureView 手势视图
/// @param recognizer 手势
func gestureViewSingleTap(gestureView:CNLivePlayerGestureView,recognizer:UITapGestureRecognizer)
/// 点两次
/// @param gestureView 手势视图
/// @param recognizer 手势
func gestureViewDoubleTap(gestureView:CNLivePlayerGestureView,recognizer:UITapGestureRecognizer)
/// 滑动手势
/// @param gestureView 手势视图
/// @param panGestureRecognizer 手势
func gestureViewPan(gestureView:CNLivePlayerGestureView,panGestureRecognizer:UIPanGestureRecognizer)
}
class CNLivePlayerGestureView:UIView{
/// 代理
weak var delegate:CNLivePlayerGestureViewDelegate?
/// 单击手势
var singleTapGestureRecognizer:UITapGestureRecognizer?
/// 双击手势
var doubleTapGestureRecognizer:UITapGestureRecognizer?
/// 滑动手势
var panGestureRecognizer:UIPanGestureRecognizer?
/// 手势样式 默认都存在
var _style:CNLivePlayerGestureStyle = .all
var style:CNLivePlayerGestureStyle{
get{
_style
}
set{
_style = newValue
if self.singleTapGestureRecognizer != nil && self.doubleTapGestureRecognizer != nil && self.panGestureRecognizer != nil{
self.removeGestureRecognizer(self.singleTapGestureRecognizer!)
self.singleTapGestureRecognizer = nil
self.removeGestureRecognizer(self.doubleTapGestureRecognizer!)
self.doubleTapGestureRecognizer = nil
self.removeGestureRecognizer(self.panGestureRecognizer!)
self.panGestureRecognizer = nil
}
self.addGesture()
}
}
// MARK: - 内部使用
/// 内部操作手势样式 外部别修改
var _private_style:CNLivePlayerGestureStyle = .all
var private_style:CNLivePlayerGestureStyle{
get{
_private_style
}
set{
_private_style = newValue
if self.singleTapGestureRecognizer != nil && self.doubleTapGestureRecognizer != nil && self.panGestureRecognizer != nil{
self.removeGestureRecognizer(self.singleTapGestureRecognizer!)
self.singleTapGestureRecognizer = nil
self.removeGestureRecognizer(self.doubleTapGestureRecognizer!)
self.doubleTapGestureRecognizer = nil
self.removeGestureRecognizer(self.panGestureRecognizer!)
self.panGestureRecognizer = nil
}
self.addGesture()
}
}
// MARK: - init
init() {
super.init(frame: CGRectZero)
self.private_style = .allButPanGesture
self.addGesture()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - 手势
func addGesture(){
if self.style == .none{
return
}
if ((self.private_style == .nonePrivate && (self.style == .all || self.style == .allButPanGesture || self.style == .singleTap)) || self.private_style == .all || self.private_style == .allButPanGesture || self.private_style == .singleTap){
self.singleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(singleTapGestureRecognizer(_:)))
self.addGestureRecognizer(self.singleTapGestureRecognizer!)
}
if ((self.private_style == .nonePrivate && (self.style == .all || self.style == .allButPanGesture)) || self.private_style == .all || self.private_style == .allButPanGesture) {
self.doubleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(doubleTapGestureRecognizer(_:)))
self.doubleTapGestureRecognizer!.numberOfTapsRequired = 2
self.addGestureRecognizer(self.doubleTapGestureRecognizer!)
self.singleTapGestureRecognizer?.require(toFail: self.doubleTapGestureRecognizer!)
}
if ((self.private_style == .nonePrivate && self.style == .all) || self.private_style == .all) {
self.panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(panGestureRecognizer(_:)))
self.panGestureRecognizer?.maximumNumberOfTouches = 1
self.addGestureRecognizer(self.panGestureRecognizer!)
}
}
// MARK: - 触发事件
@objc func singleTapGestureRecognizer(_ recognizer:UITapGestureRecognizer){
self.delegate?.gestureViewSingleTap(gestureView: self, recognizer: recognizer)
}
@objc func doubleTapGestureRecognizer(_ recognizer:UITapGestureRecognizer){
self.delegate?.gestureViewDoubleTap(gestureView: self, recognizer: recognizer)
}
@objc func panGestureRecognizer(_ panGestureRecognizer:UIPanGestureRecognizer){
self.delegate?.gestureViewPan(gestureView: self, panGestureRecognizer: panGestureRecognizer)
}
}