zoukankan      html  css  js  c++  java
  • 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()

  • 相关阅读:
    Xcode 自定义代码段
    Foundation和CoreFoundation之间的转换
    如何由新特性跳转到App首页
    判断是否是新特性,决定是否进入欢迎页
    iOS面试题01
    公司生日聚会-水长城之游
    jquery操作html元素之(设置内容和属性)
    jquery操作html元素之( 获得内容和属性)
    解决:Map的area属性标签鼠标Hover可以给area加背景
    在网页制作中,面对设计图,网页制作人员一般要遵循的原则是什么?
  • 原文地址:https://www.cnblogs.com/cui-cui/p/10119695.html
Copyright © 2011-2022 走看看