[swift] 定时器封装

2017-07-04  本文已影响42人  Kean_Qi

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

//  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
        
        
    }

}

上一篇 下一篇

猜你喜欢

热点阅读