CNLiveMineInfoAlertView.swift 11 KB
//
//  CNLiveMineInfoAlertView.swift
//  metaCode
//
//  Created by open on 2023/6/9.
//

import Foundation

enum CNLiveMineInfoAlertShowType {
    case gender
    case birthday
}

typealias CloseGenderResultBlock = (_ text: String) ->Void
class MineInfoAlertView: UIView {
    
    lazy var tapGesture = UITapGestureRecognizer()
    lazy var grayMaskView: UIView = {
       let grayMaskView = UIView()
       tapGesture.addTarget(self, action: #selector(setupCloseButtonAction))
       grayMaskView.backgroundColor = UIColor.black.withAlphaComponent(0.2)
       grayMaskView.addGestureRecognizer(tapGesture)
       return grayMaskView
    }()
    
    lazy var backView: UIView = {
        let backView = UIView()
        backView.backgroundColor = UIColor.white
        backView.layer.cornerRadius = 12
        return backView
    }()
    
    lazy var contentView : UIView = {
        let contentView = UIView.init()
        contentView.backgroundColor = .white
        contentView.isHidden = true
        return contentView
    }()
    
    lazy var wBtn: UIButton = {
        let wBtn = UIButton.init(type: .custom)
        wBtn.backgroundColor = .white
        wBtn.setImage(UIImage(named: "mine_info_alert_icon_w_nomal"), for: .normal)
        wBtn.setImage(UIImage(named: "mine_info_alert_icon_w_nomal"), for: .highlighted)
        wBtn.setImage(UIImage(named: "mine_info_alert_icon_w_select"), for: .selected)
        wBtn.imageView?.contentMode = .scaleToFill
        wBtn.layer.cornerRadius = 40
        wBtn.layer.masksToBounds = true
        wBtn.addTarget(self, action: #selector(wClickAction), for: .touchUpInside)
        return wBtn
    }()
    
    lazy var mBtn: UIButton = {
        let mBtn = UIButton.init(type: .custom)
        mBtn.backgroundColor = .white
        mBtn.setImage(UIImage(named: "mine_info_alert_icon_m_nomal"), for: .normal)
        mBtn.setImage(UIImage(named: "mine_info_alert_icon_m_nomal"), for: .highlighted)
        mBtn.setImage(UIImage(named: "mine_info_alert_icon_m_select"), for: .selected)
        mBtn.imageView?.contentMode = .scaleToFill
        mBtn.layer.cornerRadius = 40
        mBtn.layer.masksToBounds = true
        mBtn.addTarget(self, action: #selector(mClickAction), for: .touchUpInside)
        return mBtn
    }()
    
    lazy var wLabel: UILabel = {
        let wLabel = UILabel.init()
        wLabel.text = "女"
        wLabel.textAlignment = .center
        wLabel.textColor = .black
        wLabel.font = BoldFont_17_Fit
        return wLabel
    }()
    
    lazy var mLabel: UILabel = {
        let mLabel = UILabel.init()
        mLabel.text = "男"
        mLabel.textAlignment = .center
        mLabel.textColor = .black
        mLabel.font = BoldFont_17_Fit
        return mLabel
    }()
    
    lazy var wView: UIImageView = {
        let wView = UIImageView.init()
        wView.image = UIImage(named: "mine_info_alert_icon_g_select")
        wView.layer.cornerRadius = 8
        wView.layer.masksToBounds = true
        wView.backgroundColor = .clear
        wView.isHidden = true
        return wView
    }()
    
    lazy var mView: UIImageView = {
        let mView = UIImageView.init()
        mView.image = UIImage(named: "mine_info_alert_icon_g_select")
        mView.layer.cornerRadius = 8
        mView.layer.masksToBounds = true
        mView.backgroundColor = .clear
        mView.isHidden = true
        return mView
    }()
    
    lazy var datePicker: UIDatePicker = {
        let datePicker = UIDatePicker.init()
        datePicker.locale = Locale(identifier: "zh_CN")
        datePicker.timeZone = TimeZone.init(identifier: "UTC")
        datePicker.setValue(HexColor("#3C3C3C"), forKey: "textColor")
        datePicker.datePickerMode = .date
        datePicker.isHidden = true
        datePicker.minimumDate = Date.init(timeIntervalSince1970: -60*60*24*365*60)
        datePicker.maximumDate = Date.init(timeInterval: 0, since: Date.init())
        datePicker.addTarget(self, action: #selector(dateChangeAction), for: .valueChanged)
        return datePicker
    }()
    
    lazy var nameLable : UILabel = {
        let nameLable = UILabel.init()
        nameLable.backgroundColor = .white
        nameLable.font = BoldFont_16_Fit
        nameLable.textAlignment  = .center
        nameLable.textColor = .black
        return nameLable
    }()
    
    lazy var lineLable : UILabel = {
        let lineLable = UILabel.init()
        lineLable.backgroundColor = HexColor("#E6E6E6")
        return lineLable
    }()
    
    lazy var doneButton : UIButton = {
        let doneButton = UIButton(type: .custom)
        doneButton.setTitle("确定", for: .normal)
        doneButton.setTitleColor(HexColor("#0066FE"), for: .normal)
        doneButton.titleLabel?.font = Font_16
        doneButton.addTarget(self, action: #selector(setupDoneButtonAction), for: .touchUpInside)
        return doneButton
    }()
    
    lazy var closeButton : UIButton = {
        let closeButton = UIButton(type: .custom)
        closeButton.setImage(UIImage(named: "login_alert_country_close"), for: .normal)
        closeButton.backgroundColor = .clear
        closeButton.addTarget(self, action: #selector(setupCloseButtonAction), for: .touchUpInside)
        return closeButton
    }()
    
    var gender: String?
    var result: CloseGenderResultBlock?
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        addSubview(grayMaskView)
        addSubview(backView)
        backView.addSubview(datePicker)
        backView.addSubview(contentView)
        contentView.addSubview(wBtn)
        contentView.addSubview(mBtn)
        contentView.addSubview(wLabel)
        contentView.addSubview(mLabel)
        contentView.addSubview(wView)
        contentView.addSubview(mView)
        backView.addSubview(nameLable)
        backView.addSubview(lineLable)
        backView.addSubview(closeButton)
        backView.addSubview(doneButton)

        wBtn.isSelected = UserInfoManager.shared.userInfo.gender == "男"
        mBtn.isSelected = UserInfoManager.shared.userInfo.gender == "女"
        wView.isHidden = UserInfoManager.shared.userInfo.gender == "男"
        wView.isHidden = UserInfoManager.shared.userInfo.gender == "女"
        
        setConstraints()
    }
    
    func setConstraints() {
        grayMaskView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
        backView.snp.makeConstraints { make in
            make.top.equalTo(self.snp.bottom).offset(0)
            make.left.right.equalToSuperview()
            make.height.equalTo(250)
        }
        doneButton.snp.makeConstraints { make in
            make.right.equalToSuperview()
            make.top.equalTo(10)
            make.height.equalTo(30)
            make.width.equalTo(60)
        }
        closeButton.snp.makeConstraints { make in
            make.centerY.equalTo(doneButton)
            make.left.equalTo(8)
            make.size.equalTo(30)
        }
        nameLable.snp.makeConstraints { make in
            make.centerY.equalTo(doneButton)
            make.centerX.equalToSuperview()
        }
        lineLable.snp.makeConstraints { make in
            make.left.right.equalToSuperview()
            make.height.equalTo(1)
            make.top.equalTo(doneButton.snp.bottom).offset(10)
        }
        datePicker.snp.makeConstraints { make in
            make.bottom.equalToSuperview()
            make.left.right.equalToSuperview()
            make.top.equalTo(lineLable.snp.bottom)
        }
        contentView.snp.makeConstraints { make in
            make.bottom.equalToSuperview()
            make.left.right.equalToSuperview()
            make.top.equalTo(lineLable.snp.bottom)
        }
        mBtn.snp.makeConstraints { make in
            make.centerY.equalToSuperview()
            make.right.equalToSuperview().offset(-(KSreenWidth - 160)/3)
            make.size.equalTo(80)
        }
        wBtn.snp.makeConstraints { make in
            make.centerY.equalToSuperview()
            make.left.equalToSuperview().offset((KSreenWidth - 160)/3)
            make.size.equalTo(80)
        }
        mLabel.snp.makeConstraints { make in
            make.centerX.equalTo(wBtn)
            make.top.equalTo(wBtn.snp.bottom).offset(10)
        }
        wLabel.snp.makeConstraints { make in
            make.centerX.equalTo(mBtn)
            make.top.equalTo(mBtn.snp.bottom).offset(10)
        }
        mView.snp.makeConstraints { make in
            make.centerX.equalTo(mBtn)
            make.bottom.equalTo(mBtn.snp.bottom).offset(8)
            make.size.equalTo(16)
        }
        wView.snp.makeConstraints { make in
            make.centerX.equalTo(wBtn)
            make.bottom.equalTo(wBtn.snp.bottom).offset(8)
            make.size.equalTo(16)
        }

    }
    
    static public func showSelectView(showType: CNLiveMineInfoAlertShowType, result: @escaping CloseGenderResultBlock){
        let pickerView = MineInfoAlertView()
        pickerView.result = result
        
        switch showType {
        case .gender:
            pickerView.nameLable.text = "设置性别"
            pickerView.contentView.isHidden = false
            pickerView.datePicker.isHidden = true
        case .birthday:
            pickerView.nameLable.text = "选择生日"
            pickerView.contentView.isHidden = true
            pickerView.datePicker.isHidden = false
        }
        
        let window = UIApplication.shared.windows.last
        window?.addSubview(pickerView)
        pickerView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
        window?.layoutIfNeeded()
        pickerView.alpha = 0
        UIView.animate(withDuration: 0.1) {
            pickerView.alpha = 1
        } completion: { _ in
            UIView.animate(withDuration: 0.1) {
                pickerView.backView.snp.updateConstraints { make in
                    make.top.equalTo(pickerView.snp.bottom).offset(-pickerView.backView.frame.height)
                }
                pickerView.layoutIfNeeded()
            }
        }
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    @objc func dateChangeAction(sender: UIDatePicker) {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd"
        print("\(formatter.string(from: datePicker.date))")
        result!(formatter.string(from: datePicker.date))
    }
    
    @objc func setupDoneButtonAction() {
        print("进行更改\(gender ?? "")")
        removeFromSuperview()
    }
    
    @objc func setupCloseButtonAction() -> Void {
        removeFromSuperview()
    }
    
    @objc func mClickAction(sender: UIButton) {
        sender.isSelected = !sender.isSelected
        wBtn.isSelected = !sender.isSelected
        mView.isHidden = !sender.isSelected
        wView.isHidden = sender.isSelected
        gender = "m"
        result!("女")
    }
    
    @objc func wClickAction(sender: UIButton) {
        sender.isSelected = !sender.isSelected
        mBtn.isSelected = !sender.isSelected
        wView.isHidden = !sender.isSelected
        mView.isHidden = sender.isSelected
        gender = "w"
        result!("男")
    }
}