swift 倒计时按钮设置

获取验证码倒计时的按钮。

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在倒计时的时候会一秒闪烁一下。

---来自涛胖子的工作笔记

你可能感兴趣的:(swift 倒计时按钮设置)