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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,270评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,359评论 19 139
  • 一 暖暖是个小姑娘,今年六岁。就像她的名字一样,暖暖长得可爱,让人看了暖暖的,暖暖说话时声音软糯,让人听了暖暖的。...
    写意小生阅读 3,251评论 2 1
  • 不造过期作业还有没有用,看完了就想法就写下来啦。 变现营收应该是每个互联网公司的重中之重吧,可惜曾经有一个我...
    素风彩铃阅读 1,657评论 0 0
  • 穷人和富人的人脉结构,弱关系竟如此重要 中国人很喜欢讲关系,但我们却并没有真的了解关系,国外的学者,将关系分为两种...
    创一学习吧阅读 2,976评论 0 0