swift4.2 - 一個自定義view彈框


 

 

import UIKit
/*
 *  注冊協議view:沒找到 UI原圖,咱不實現
 */
class JYRegisterProtocolView: UIView {
    
    /// 點擊同意協議的回調
    private var clickSelectedBtnBlock:((_ isSelected:Bool) -> Void)?
    /// 點擊完成按鈕的回調
    private var clickCompleteBtnBlock:(() -> Void)?

    /// 單例屬性
    static let share : JYRegisterProtocolView = {
        let view = JYRegisterProtocolView()
        return view
    }()
    
    /// 背景view
    private lazy var bgView : UIView = {
        let v = JYUIModel.createView()
        v.layer.cornerRadius = 25
        v.layer.masksToBounds = true
        return v
    }()
    
    /// 注冊協議標題
    private lazy var titleLabel : UILabel = JYUIModel.creatLabe(text: "注冊協議", font: UIFont.systemFont(ofSize: 30), textColor: UIColor.red, textAlignment: NSTextAlignment.center)
    
    /// 副標題標題
    private lazy var subtitleLabel : UILabel = {
        let lab = JYUIModel.creatLabe(text: "瘋搶進10萬元現金,等你來拿!\n\n參賽資格:劍琅聯盟使用用戶中:\n1.店鋪老板 \n2.店鋪發型師 \n3.店鋪美甲師 \n活動有效期:2019.1.1~2019.3.31\n \n活動共五期 沒齊活動獎勵:\n第一名8000元(推薦員工獎勵5000元現金,所在店鋪老板獎勵3000元現金)\n第二名 3000元 \n第三名 2000元", font: UIFont.systemFont(ofSize: 15), textColor: UIColor.red, textAlignment: NSTextAlignment.left)
        lab.numberOfLines = 0
        return lab
    }()
    
    /// 選擇按鈕
    private lazy var selectedBtn : UIButton = {
        let btn = JYUIModel.createBtn()
        btn.addTarget(self, action: #selector(clickSelectedBtn), for: UIControl.Event.touchUpInside)
        btn.backgroundColor = UIColor.orange
        
        return  btn
    }()
    
    /// 同意文字標題
    private lazy var agreeLabel : UILabel = JYUIModel.creatLabe(text: "我已認真閱讀並同意", font: UIFont.systemFont(ofSize: 16), textColor: UIColor.red, textAlignment: NSTextAlignment.center)
    
    /// 完成按鈕
    private lazy var completeBtn : UIButton = {
        let btn = JYUIModel.createBtn()
        btn.titleLabel?.font = UIFont.systemFont(ofSize: 30)
        btn.layer.cornerRadius = 25
        btn.layer.masksToBounds = true
        btn.backgroundColor = UIColor.purple
        btn.setTitle("完成注冊", for: UIControl.State.normal)
        btn.setTitleColor(UIColor.red, for: UIControl.State.normal)
        btn.setTitle("完成注冊", for: UIControl.State.selected)
        btn.setTitleColor(UIColor.green, for: UIControl.State.selected)
        btn.addTarget(self, action: #selector(clickcompleteBtn), for: UIControl.Event.touchUpInside)
        return  btn
    }()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        configUI()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    //點擊背景view 移除當前控件
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        if let touch = touches.first  {
            var point =  touch.location(in: self)
            point = bgView.layer.convert(point, from: self.layer)
            if !bgView.layer.contains(point){
                self.removeView()
            }
        }
    }
    
    /// 移除彈框(內部移除)
    private func removeView() {
        UIView.animate(withDuration: 0.5, animations: { [weak self] in
            self?.alpha = 0
        }) { [weak self] (res) in
            self?.removeFromSuperview()
        }
    }
    
    /// 初始化歡迎彈框
    convenience init(titleText:String? = nil,
                     subtitle: String? = nil ,
                     agree:String? = nil,
                     buttonText: String? = nil) {
        self.init()
        
        if agree != nil {
            self.titleLabel.text = titleText
        }
        if agree != nil {
            self.agreeLabel.text = agree
        }
        if subtitle != nil{
            self.subtitleLabel.text = subtitle
        }
        
        if buttonText != nil{
            self.completeBtn.setTitle(buttonText, for: .normal)
        }
    }
    
    
    /// 顯示彈框
    func showAlert(selectedBtnBlock:((_ isSelected:Bool) -> Void)? , completeBtnBlock:(() -> Void)?) {
        
        JYWindow.subviews.forEach { (v) in
            if v is JYRegisterProtocolView {
                return
            }
        }

        JYWindow.addSubview(self)
        self.clickSelectedBtnBlock = selectedBtnBlock
        self.clickCompleteBtnBlock = completeBtnBlock
        self.alpha = 0
        self.isUserInteractionEnabled = false
        UIView.animate(withDuration: 0.5) {
            self.alpha = 1
            self.isUserInteractionEnabled = true
        }
    }
}

// MARK: - 點擊事件
extension JYRegisterProtocolView{
    
    /// 點擊閱讀
    @objc private func clickSelectedBtn(){
        selectedBtn.isSelected.toggle()
        if selectedBtn.isSelected == true {
            selectedBtn.backgroundColor = UIColor.black
        }else{
            selectedBtn.backgroundColor = UIColor.orange
        }
        clickSelectedBtnBlock?(selectedBtn.isSelected)
    }
    
    /// 點擊完成注冊
    @objc private func clickcompleteBtn(){
        if selectedBtn.isSelected == false{
           DDLOG(message: "給個提示")
        }else{
            clickCompleteBtnBlock?()
            self.removeView()
        }
    }
}

// MARK: - UI
extension JYRegisterProtocolView{
    func configUI(){
        
        self.backgroundColor = "000000".jy.getColor().withAlphaComponent(0.3)
        self.frame = UIScreen.main.bounds
        self.layoutIfNeeded()
        
        configBgView()
        let vd : [String:UIView] = ["bgView":bgView]
        addSubview(bgView)
        self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "|-24-[bgView]-24-|", options: [], metrics: nil, views: vd))
        self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[bgView]", options: [], metrics: nil, views: vd))
        bgView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
        bgView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
        addSubview(bgView)
        

    }
    
    /// 背景view的UI
    func configBgView(){
        let vd : [String : UIView] = ["titleLabel":titleLabel,
                                      "subtitleLabel":subtitleLabel,
                                      "selectedBtn":selectedBtn,
                                      "agreeLabel":agreeLabel,
                                      "completeBtn":completeBtn]
        bgView.addSubview(titleLabel)
        bgView.addSubview(subtitleLabel)
        bgView.addSubview(selectedBtn)
        bgView.addSubview(agreeLabel)
        bgView.addSubview(completeBtn)
        
        bgView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "|[titleLabel]|", options: [], metrics: nil, views: vd))
        bgView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "|-15-[subtitleLabel]-15-|", options: [], metrics: nil, views: vd))
        bgView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "[selectedBtn(20)]-10-[agreeLabel]", options: [.alignAllCenterY], metrics: nil, views: vd))
        bgView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "|-50-[completeBtn]-50-|", options: [], metrics: nil, views: vd))
        
        bgView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-15-[titleLabel]-10-[subtitleLabel]-30-[agreeLabel]-20-[completeBtn(50)]-20-|", options: [.alignAllCenterX], metrics: nil, views: vd))
        selectedBtn.heightAnchor.constraint(equalToConstant: 20).isActive = true
    }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM