CNLiveSelUplSingleImageView.swift 9.81 KB
//
//  CNLiveSelUplSingleImageView.swift
//  metaCode
//
//  Created by zx on 2023/11/21.
//

import Foundation
import Kingfisher


typealias clickCallBackBlock1 = (_ model:CNLiveSelectUploadImageModel)->Void
typealias clickDeleteCallBackBlock = (_ model:CNLiveSelectUploadImageModel)->Void
typealias clickSettingCoverCallBackBlock = (_ model:CNLiveSelectUploadImageModel)->Void


class CNLiveSelUplSingleImageView: UIView {
    
    // MARK: - UI
    /// 当前显示
    var displayImageView : UIImageView?
    // MARK: - 赋值
    /// 自定义删除图片 默认DS_SelUplImageView_delete
    var _deleteImage : UIImage?
    var deleteImage : UIImage?{
        get{
            _deleteImage
        }
        set{
            _deleteImage = newValue
            
            if _deleteImage?.isKind(of: UIImage.self) == true {
                self.deleteImageView?.image = _deleteImage
            }else{
                self.deleteImageView?.image = UIImage(named: "DS_SelUplImageView_delete")
            }
            self.deleteImageView?.image = UIImage(named: "DS_SelUplImageView_delete")
        }
    }
    /// 是否显示选取封面
    var _isDisplySelectCover : Bool?
    var isDisplySelectCover : Bool?{
        get{
            _isDisplySelectCover
        }
        set{
            _isDisplySelectCover = newValue
            if (self.model?.isSelectPhotoPlaceholder == false && self.model?.isVideo == false){
                if _isDisplySelectCover!{
                    self.coverBtn?.isHidden = false
                }else{
                    self.coverBtn?.isHidden = true
                }
            }else{
                self.coverBtn?.isHidden = true
            }
        }
    }
    
    /// 显示类型
    var _displayType : CNLiveSelectUploadImageViewDisplayType?
    var displayType : CNLiveSelectUploadImageViewDisplayType?{
        get{
            _displayType
        }
        set{
            _displayType = newValue
            if _displayType == .select{
                self.coverBtn?.isUserInteractionEnabled = true
            }else{
                self.coverBtn?.isUserInteractionEnabled = false
            }
            self.deleteImageView?.image = UIImage(named: "DS_SelUplImageView_delete")
        }
    }

    /// 数据
    var model : CNLiveSelectUploadImageModel?

    /// 是否隐藏删除按钮
    var isHideDeleteBtn : Bool?
    /// 是否是封面
    var isCover : Bool = false
    /// 赋值
    /// @param model 数据
    /// @param isHideDeleteBtn 是否隐藏删除按钮
    /// @param isCover 是否是封面
    func setModel(model:CNLiveSelectUploadImageModel,isHideDeleteBtn:Bool,isCover:Bool){
        self.model = model
        self.isHideDeleteBtn = isHideDeleteBtn
        self.isCover = isCover
        if (self.model?.isSelectPhotoPlaceholder != nil && self.model?.isSelectPhotoPlaceholder == true){
            self.displayImageView?.image = UIImage(named: "DS_SelUplImageView_selectImage")
            self.progressLab?.isHidden = true
            self.deleteBtn?.isHidden = true
            self.playImageView?.isHidden = true
            self.coverBtn?.isHidden = true
        }else if (self.model?.isVideo == true && self.model?.isVideo != nil){
            if self.model?.videoUrl?.count ?? 0 > 0{
                self.displayImageView?.image = self.model?.image
                if self.model?.image == nil{
                    self.displayImageView?.kf.setImage(with: URL(string: self.model?.imageUrl ?? ""), placeholder: self.model?.image)
                }
                self.progressLab?.isHidden = true
                if self.isHideDeleteBtn! == true{
                    self.deleteBtn?.isHidden = true
                }else{
                    self.deleteBtn?.isHidden = false
                }
                self.playImageView?.isHidden = false
            }else if (self.model?.isUploading != nil && self.model?.isUploading == true){
                self.displayImageView?.image = self.model?.image
                self.progressLab?.text = String(format: "%.0f%%", (self.model!.uploadingPercent)*100)
                self.progressLab?.isHidden = false
                self.deleteBtn?.isHidden = false
                self.playImageView?.isHidden = true
            }else{
                self.displayImageView?.image = UIImage(named: "DS_SelUplImageView_selectVideo")
                self.progressLab?.isHidden = true
                self.deleteBtn?.isHidden = true
                self.playImageView?.isHidden = true

            }
            self.coverBtn?.isHidden = true
        }else{
            self.displayImageView?.image = self.model?.image
            if self.model?.imageUrl?.count ?? 0 > 0 {
                self.displayImageView?.kf.setImage(with: URL(string: self.model?.imageUrl ?? ""), placeholder: self.model?.image)
                self.progressLab?.isHidden = true
                if self.isHideDeleteBtn! == true{
                    self.deleteBtn?.isHidden = true
                }else{
                    self.deleteBtn?.isHidden = false
                }
            }else if self.model?.isUploading == true{
                self.progressLab?.text = String(format: "%.0f%%", self.model?.uploadingPercent ?? 0 * 100)
                self.progressLab?.isHidden = false
                self.deleteBtn?.isHidden = false
            }
            self.playImageView?.isHidden = true
            self.coverBtn?.isHidden = (self.isDisplySelectCover != nil && self.isDisplySelectCover == true) ? false : true
            if self.isCover == true{
                self.coverBtn?.setTitle("主页", for: .normal)
                self.coverBtn?.setTitleColor(HexColor("#F5A623"), for: .normal)
                self.coverBtn?.backgroundColor = HexColor("#FEF4E4")
            }else{
                if self.displayType == .select{
                    self.coverBtn?.setTitle("设置主页", for: .normal)
                    self.coverBtn?.setTitleColor(HexColor("#787878"), for: .normal)
                    self.coverBtn?.backgroundColor = HexColor("#EAEAEA")
                }else{
                    self.coverBtn?.setTitle("", for: .normal)
                    self.coverBtn?.setTitleColor(.clear, for: .normal)
                    self.coverBtn?.backgroundColor = .clear
                }
            }
        }
        self.deleteImageView?.image = UIImage(named: "DS_SelUplImageView_delete")
    }

    // MARK: - 回调
    /// 点击自身回调
    var clickCallBack:clickCallBackBlock1?
    /// 点击删除回调
    var clickDeleteCallBack:clickDeleteCallBackBlock?
    /// 点击设为主页回调
    var clickSettingCoverCallBack:clickSettingCoverCallBackBlock?
    var progressLab : UILabel?
    var deleteBtn : UIButton?
    var deleteImageView : UIImageView?
    var playImageView : UIImageView?
    var coverBtn : UIButton?

    // MARK: - init
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.initUI()
        let selfTap = UITapGestureRecognizer(target: self, action: #selector(selfTap))
        self.addGestureRecognizer(selfTap)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        self.deleteBtn?.frame = CGRect(x: self.width-25, y: 0, width: 25, height: 30)
        self.deleteImageView?.frame = CGRect(x: self.deleteBtn!.width-17, y: 0, width: 17, height: 17)
        self.displayImageView?.frame = CGRect(x: 0, y: self.deleteImageView!.height/2, width: self.width-self.deleteImageView!.width/2, height: self.width-self.deleteImageView!.height/2)
        self.progressLab?.frame = self.displayImageView!.frame
        self.playImageView?.frame = CGRect(x: (self.displayImageView!.width-26)/2, y: self.displayImageView!.top+(self.displayImageView!.height-26)/2, width: 26, height: 26)
        self.coverBtn?.frame = CGRect(x: self.displayImageView!.left, y: self.displayImageView!.bottom-20, width: self.displayImageView!.width, height: 20)
    }

    // MARK: - initUI
    func initUI(){
        self.displayImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 78, height: 78))
        self.displayImageView?.clipsToBounds = true
        self.displayImageView?.contentMode = .scaleAspectFill
        self.addSubview(self.displayImageView!)
        
        self.progressLab = UILabel()
        self.progressLab?.textColor = HexColor("#ffffff")
        self.progressLab?.font = Font_12
        self.progressLab?.backgroundColor = HexColor("#000000", alpha: 0.6)
        self.progressLab?.textAlignment = .center
        self.addSubview(self.progressLab!)
        
        self.deleteBtn = UIButton(type: .custom)
        self.deleteBtn?.addTarget(self, action: #selector(deleteBtnClick), for: .touchUpInside)
        self.addSubview(self.deleteBtn!)
        
        self.deleteImageView = UIImageView()
        self.deleteImageView?.clipsToBounds = true
        self.deleteImageView?.contentMode = .scaleAspectFit
        self.deleteImageView?.image = UIImage(named: "DS_SelUplImageView_delete")
        self.deleteBtn?.addSubview(self.deleteImageView!)
        
        self.playImageView = UIImageView()
        self.playImageView?.clipsToBounds = true
        self.playImageView?.contentMode = .scaleAspectFit
        self.playImageView?.image = UIImage(named: "DS_SelUplImageView_play")
        self.addSubview(self.playImageView!)
        
        self.coverBtn = UIButton(type: .custom)
        self.coverBtn?.addTarget(self, action: #selector(coverBtnClick), for: .touchUpInside)
        self.coverBtn?.titleLabel?.font = Font_11
        self.coverBtn?.isUserInteractionEnabled = false
        self.addSubview(self.coverBtn!)
    }

    // MARK: - 触发事件
    @objc func selfTap(){
        self.clickCallBack!(self.model!)
    }
    @objc func deleteBtnClick(){
        self.clickDeleteCallBack!(self.model!)
    }
    @objc func coverBtnClick(){
        self.clickSettingCoverCallBack!(self.model!)
    }
}