获取验证码倒计时的按钮。
class CountDown: NSObject {
class func countDown(_ timeOut: Int, btn: UIButton){
//倒计时时间
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))
//每秒执行
_timer.setEventHandler(handler: { () -> Void in
if(timeout<=0){ //倒计时结束,关闭
_timer.cancel();
DispatchQueue.main.sync(execute: { () -> Void in
btn.setTitle("重新获取", for: .normal)
btn.isEnabled = true
btn.layer.backgroundColor = UIColor.red.cgColor
})
}else{//正在倒计时
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()
}
}
在你需要的时候调用:
//设置倒计时
CountDown.countDown(60 , btn: yourBtn)
这样就实现了你的获取验证码倒计时,不过还有一个最重要的问题:
当你初始化一个btn的时候,他的类型是system,这里就需要将这个类型改为custom。这个很重要。不然你的btn在倒计时的时候会一秒闪烁一下。
---来自涛胖子的工作笔记