[swift] 定时器封装

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

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

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,034评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,489评论 4 61
  • 今天在写作打卡群里,讨论了关于感恩的话题。 在这里特别想感恩一个素未谋面的朋友——汤老师 不知道什么时候加了汤老师...
    左拐再左拐阅读 5,553评论 0 0
  • 今天在朋友圈发了条说说,是店铺卖咖啡的,然后没过一会儿,我一个盆友就在下面回复“一看就是假货”,看到那个,嗯,感觉...
    赖姐阅读 1,531评论 1 1
  • 寒假开始。越来越喜欢有寒暑假的生活,喜欢和孩子们在一起的工作。很简单,很宁静。内心的世界很柔和,于是幸福并不遥远。...
    雨中葳蕤阅读 4,280评论 8 9

友情链接更多精彩内容