[swift] 定時(shí)器封裝

開(kāi)發(fā)中不可避免會(huì)用到注冊(cè)獲取驗(yàn)證碼,在驗(yàn)證碼定時(shí)器使用方面別出心裁,各有妙招,今天推薦一個(gè)比較實(shí)用的定時(shí)器使用方法,特做了一個(gè)封裝。

//  KTimeCountDown.swift

import UIKit

//設(shè)置一個(gè)靜態(tài)的時(shí)間范圍,以便更改
private let kCodeTime = 60

class KTimeCountDown {
    //定義一個(gè)私有定時(shí)器變量
    private var codeTimer: Timer?
    //初始化一個(gè)UIButton供外部使用及定時(shí)器時(shí)間處理
    var codeBtn = UIButton()
    
    //定義一個(gè)定時(shí)剩余時(shí)間, 默認(rèn)為0
    private var countDownTime: Int = 0 {
        willSet{
            //事件不為0 isCountDown的狀態(tài)始終未true
            codeBtn.setTitle("重新獲取\(newValue)秒", for: .normal)
            //事件小于等于0 isCountDown的狀態(tài)改變 按鈕重置
            if newValue <= 0 {
                codeBtn.setTitle("獲取驗(yàn)證碼", for: .normal)
                isCountDown = false
            }
        }
    }
    
    //定義一個(gè) 是否正在倒計(jì)時(shí)的狀態(tài)
    var isCountDown = false {
        willSet {
            if newValue {
                //創(chuàng)建定時(shí)器
                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 ,銷毀定時(shí)器
                codeTimer?.invalidate()
                codeTimer = nil
                //按鈕狀態(tài)改變 重置
                codeBtn.setTitleColor(UIColor.brown, for: .normal)
                codeBtn.setTitle("獲取驗(yàn)證碼", for: .normal)
            }
            //如果isCountDown為true ,禁用按鈕事件
            codeBtn.isEnabled = !newValue
        }
    }
    
    
    @objc private func countDownTimeAction() {
        countDownTime -= 1
    }
    
}

使用方法


import UIKit
import SnapKit

class RegisterViewController: UIViewController {

    var countDown = KTimeCountDown()//實(shí)例化

    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("獲取驗(yàn)證碼", for: .normal)
        codeBtn.setTitleColor(UIColor.brown, for: .normal)
        
        
    }

    //開(kāi)啟定時(shí)器
    func codeBtnClick(_ sender: UIButton){
        //只需要調(diào)此方法
        countDown.isCountDown = true
    }
    
    //取消定時(shí)器
    @IBAction func backBtnClick(_ sender: Any) {
        //只需要調(diào)此方法
        countDown.isCountDown = false
        
        
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,063評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,379評(píng)論 4 61
  • 今天在寫作打卡群里,討論了關(guān)于感恩的話題。 在這里特別想感恩一個(gè)素未謀面的朋友——湯老師 不知道什么時(shí)候加了湯老師...
    左拐再左拐閱讀 1,766評(píng)論 0 0
  • 今天在朋友圈發(fā)了條說(shuō)說(shuō),是店鋪賣咖啡的,然后沒(méi)過(guò)一會(huì)兒,我一個(gè)盆友就在下面回復(fù)“一看就是假貨”,看到那個(gè),嗯,感覺(jué)...
    賴姐閱讀 224評(píng)論 1 1
  • 寒假開(kāi)始。越來(lái)越喜歡有寒暑假的生活,喜歡和孩子們?cè)谝黄鸬墓ぷ鳌:芎?jiǎn)單,很寧?kù)o。內(nèi)心的世界很柔和,于是幸福并不遙遠(yuǎn)。...
    雨中葳蕤閱讀 912評(píng)論 8 9

友情鏈接更多精彩內(nèi)容