CNLivePlayerGestureView.swift 4.99 KB
//
//  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)
    }
}