• swift 封装按钮倒计时


    在项目开发中经常需要用到倒计时的功能,比如注册部分获取验证码时,这里通过extension(UIButton)的方式来实现倒计时的功能

    直接上代码

    var codeTimer = DispatchSource.makeTimerSource(queue:DispatchQueue.global())

    extension UIButton {    

        //倒计时启动

        func countDown(count: Int){

            // 倒计时开始,禁止点击事件

            isEnabled = false

            

            

            var remainingCount: Int = count {

                willSet {

                    setTitle("(newValue)秒重发", for: .normal)

                    

                    if newValue <= 0 {

                        setTitle("获取验证码", for: .normal)

                    }

                }

            }

            if codeTimer.isCancelled {

                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.isEnabled = true

                        codeTimer.cancel()

                    }

                }

            })

            // 启动时间源

            codeTimer.resume()

        }

        //取消倒计时

        func countdownCancel() {

            if !codeTimer.isCancelled {

                codeTimer.cancel()

            }

            

            // 返回主线程

            DispatchQueue.main.async {

                self.isEnabled = true

                if self.titleLabel?.text?.count != 0

                {

                    self.setTitle("获取验证码", for: .normal)

                }

            }

        }

    }

    在需要的地方直接调用即可

    //启动倒计时

    self.smsCodeBtn.countDown(count: 60)

    //取消倒计时

    self.smsCodeBtn.countdownCancel()

  • 相关阅读:
    大二下学期第一次结对作业(第二阶段)
    大二下学期阅读笔记(人月神话)
    大二下每周总结
    大二下学期第一次结对作业(第二阶段)
    大二下学期第一次结对作业(第二阶段)
    elasticsearch mappings之dynamic的三种状态
    elasticsearch mapping映射属性_source、_all、store和index
    Java学习
    Java学习
    Java学习
  • 原文地址:https://www.cnblogs.com/cui-cui/p/10119695.html
Copyright © 2020-2023  润新知