美文网首页Swift工作笔记
Swift 3.0 - 简单实现按钮倒计时(UIButton扩展

Swift 3.0 - 简单实现按钮倒计时(UIButton扩展

作者: KaironZz | 来源:发表于2017-06-29 11:57 被阅读1146次

    通过extension(扩展),简单实现倒计时功能,有需要的可以参考下.

    新建一个UIButton的扩展类,<small>UIButton-Extension.swift</small> 以下是代码块,只需要传入倒计时的时间即可

    // MARK: - 倒计时
    extension UIButton{
        
        public func countDown(count: Int){
            // 倒计时开始,禁止点击事件
            isEnabled = false
            
            // 保存当前的背景颜色
            let defaultColor = self.backgroundColor
            // 设置倒计时,按钮背景颜色
            backgroundColor = UIColor.gray
            
            var remainingCount: Int = count {
                willSet {
                    setTitle("重新发送(\(newValue))", for: .normal)
                    
                    if newValue <= 0 {
                        setTitle("发送验证码", for: .normal)
                    }
                }
            }
            
            // 在global线程里创建一个时间源
            let codeTimer = DispatchSource.makeTimerSource(queue:DispatchQueue.global())
            // 设定这个时间源是每秒循环一次,立即开始
            codeTimer.scheduleRepeating(deadline: .now(), interval: .seconds(1))
            // 设定时间源的触发事件
            codeTimer.setEventHandler(handler: {
                
                // 返回主线程处理一些事件,更新UI等等
                DispatchQueue.main.async {
                    // 每秒计时一次
                    remainingCount -= 1
                    // 时间到了取消时间源
                    if remainingCount <= 0 {
                        self.backgroundColor = defaultColor
                        self.isEnabled = true
                        codeTimer.cancel()
                    }
                }
            })
            // 启动时间源
            codeTimer.resume()
        }
        
    }
    

    以上,END!喜欢就点个赞呗!

    相关文章

      网友评论

        本文标题:Swift 3.0 - 简单实现按钮倒计时(UIButton扩展

        本文链接:https://www.haomeiwen.com/subject/tfjmcxtx.html