美文网首页
[swift] 定时器封装

[swift] 定时器封装

作者: Kean_Qi | 来源:发表于2017-07-04 11:32 被阅读42次

    开发中不可避免会用到注册获取验证码,在验证码定时器使用方面别出心裁,各有妙招,今天推荐一个比较实用的定时器使用方法,特做了一个封装。

    //  KTimeCountDown.swift
    
    import UIKit
    
    //设置一个静态的时间范围,以便更改
    private let kCodeTime = 60
    
    class KTimeCountDown {
        //定义一个私有定时器变量
        private var codeTimer: Timer?
        //初始化一个UIButton供外部使用及定时器时间处理
        var codeBtn = UIButton()
        
        //定义一个定时剩余时间, 默认为0
        private var countDownTime: Int = 0 {
            willSet{
                //事件不为0 isCountDown的状态始终未true
                codeBtn.setTitle("重新获取\(newValue)秒", for: .normal)
                //事件小于等于0 isCountDown的状态改变 按钮重置
                if newValue <= 0 {
                    codeBtn.setTitle("获取验证码", for: .normal)
                    isCountDown = false
                }
            }
        }
        
        //定义一个 是否正在倒计时的状态
        var isCountDown = false {
            willSet {
                if newValue {
                    //创建定时器
                    codeTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDownTimeAction), userInfo: nil, repeats: true)
                    countDownTime = kCodeTime
                    codeBtn.setTitleColor(UIColor.lightGray, for: .normal)
                } else {
                    //如果isCountDown为false ,销毁定时器
                    codeTimer?.invalidate()
                    codeTimer = nil
                    //按钮状态改变 重置
                    codeBtn.setTitleColor(UIColor.brown, for: .normal)
                    codeBtn.setTitle("获取验证码", for: .normal)
                }
                //如果isCountDown为true ,禁用按钮事件
                codeBtn.isEnabled = !newValue
            }
        }
        
        
        @objc private func countDownTimeAction() {
            countDownTime -= 1
        }
        
    }
    
    

    使用方法

    
    import UIKit
    import SnapKit
    
    class RegisterViewController: UIViewController {
    
        var countDown = KTimeCountDown()//实例化
    
        var codeBtn = UIButton()//初始化
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
    
            
            
            //不带参
    //        codeBtn.addTarget(self, action: #selector(codeBtnClick) for: .touchUpInside)
            codeBtn.addTarget(self, action: #selector(codeBtnClick(_:)), for: .touchUpInside)
            view.addSubview(codeBtn)
            codeBtn.snp.makeConstraints { (make) in
                make.center.equalTo(self.view);
                make.width.equalTo(200)
                make.height.equalTo(40)
            }
            //赋值
            countDown.codeBtn = codeBtn
            codeBtn.setTitle("获取验证码", for: .normal)
            codeBtn.setTitleColor(UIColor.brown, for: .normal)
            
            
        }
    
        //开启定时器
        func codeBtnClick(_ sender: UIButton){
            //只需要调此方法
            countDown.isCountDown = true
        }
        
        //取消定时器
        @IBAction func backBtnClick(_ sender: Any) {
            //只需要调此方法
            countDown.isCountDown = false
            
            
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:[swift] 定时器封装

          本文链接:https://www.haomeiwen.com/subject/vtwthxtx.html