swift数字倒计时的简单实现

核心代码如下

//剩余的秒数
    var remainingSeconds = 0{
        //remainingSeconds发生改变时
        willSet {
            remindLabel?.setTitle("接收短信大约需要\(newValue)秒", for: .normal)
            remindLabel?.isEnabled = false
            //当remainingSeconds小于等于0时执行
            if newValue <= 0 {
                isCounting = false
                remindLabel?.isEnabled = true
                remindLabel?.setTitle("收不到验证码?", for: .normal)
                remindLabel?.setTitleColor(MainColor, for: .normal)
            }
        }
    }
    //是否开始计时
    var isCounting = false {
        willSet {
            //当isCounting为true时执行
            if newValue {
                let timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
                RunLoop.current.add(timer, forMode: RunLoopMode.commonModes)
                self.countdownTimer = timer
                remainingSeconds = 59
            } else {
                countdownTimer?.invalidate()
                countdownTimer = nil
            }
        }
    }
    
    func updateTime(){
        remainingSeconds -= 1
    }

实现流程大概是这样的
isCounting发生改变-> timer开始执行 -> remainingSeconds发生改变 ->remainingSeconds willset执行 -> 当remainingSeconds小于等于0 -> isCounting = false -> timer停止

只要控制isCouning的值就可以实现倒计时的开关了,代码中的remindLabel是显示倒计时时间的label

退出到后台需要这一段代码配置一下

 func applicationDidEnterBackground(_ application: UIApplication) {
        //如果已存在后台任务,先将其设为完成
        if self.backgroundTask != nil {
            application.endBackgroundTask(self.backgroundTask)
            self.backgroundTask = UIBackgroundTaskInvalid
        }
        //注册后台任务
        self.backgroundTask = application.beginBackgroundTask(expirationHandler: {
            () -> Void in
            //如果没有调用endBackgroundTask,时间耗尽时应用程序将被终止
            application.endBackgroundTask(self.backgroundTask)
            self.backgroundTask = UIBackgroundTaskInvalid
        })
    }

这样就简单的实现了倒计时的功能。

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,107评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,990评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,267评论 4 61
  • 落日的余晖,从不吝啬她的光彩,尽情地撒满人间,给大地镀上一层金黄。喜欢锻炼的人们披着晚霞,优闲地散着步。这时,你总...
    dc13040acc7a阅读 359评论 0 11
  • 今天笑来老师提到了写作。写作是一件需要很强逻辑思维和深厚积累的事情。无论是那样都需要我们对自身的严格要求。...
    Edward_liao阅读 181评论 0 0