獲取驗(yàn)證碼倒計(jì)時(shí)的按鈕。
class CountDown: NSObject {
class func countDown(_ timeOut: Int, btn: UIButton){
//倒計(jì)時(shí)時(shí)間
var timeout = timeOut
let queue:DispatchQueue = DispatchQueue.global(qos: DispatchQoS.QoSClass.default)
let _timer:DispatchSource = DispatchSource.makeTimerSource(flags: [], queue: queue) as! DispatchSource
_timer.scheduleRepeating(wallDeadline: DispatchWallTime.now(), interval: .seconds(1))
//每秒執(zhí)行
_timer.setEventHandler(handler: { () -> Void in
if(timeout<=0){ //倒計(jì)時(shí)結(jié)束,關(guān)閉
_timer.cancel();
DispatchQueue.main.sync(execute: { () -> Void in
btn.setTitle("重新獲取", for: .normal)
btn.isEnabled = true
btn.layer.backgroundColor = UIColor.red.cgColor
})
}else{//正在倒計(jì)時(shí)
let seconds = timeout
DispatchQueue.main.sync(execute: { () -> Void in
let str = String(describing: seconds)
btn.setTitle(str, for: .normal)
btn.isEnabled = false
btn.layer.backgroundColor = UIColor.gray.cgColor
})
timeout -= 1;
}
})
_timer.resume()
}
}
在你需要的時(shí)候調(diào)用:
//設(shè)置倒計(jì)時(shí)
CountDown.countDown(60 , btn: yourBtn)
這樣就實(shí)現(xiàn)了你的獲取驗(yàn)證碼倒計(jì)時(shí),不過(guò)還有一個(gè)最重要的問(wèn)題:
當(dāng)你初始化一個(gè)btn的時(shí)候,他的類型是system满着,這里就需要將這個(gè)類型改為custom。這個(gè)很重要贯莺。不然你的btn在倒計(jì)時(shí)的時(shí)候會(huì)一秒閃爍一下风喇。
---來(lái)自濤胖子的工作筆記