mport UIKit/// 控制定时器的类
class ZDTimerTool: NSObject {/// 定时器
//    private var timer: Timer?/// GCD定时器private var GCDTimer: DispatchSourceTimer?/// GCD定时器的挂起状态private var isSuspend: Bool = falseoverride init() {super.init()}deinit {// 对象在销毁前会销毁定时器,所以使用定时器应该设置全局的属性
//        self.invaliTimer()self.invaliGCDTimer()DDLOG(message: "deinit: ZDTimerTool")}
}
/// GCD定时器相关方法
extension ZDTimerTool{/// 初始化得到GCD定时器func DispatchTimer(timeInterval: TimeInterval , handleBlock:@escaping (() -> Void)) {if self.GCDTimer == nil {self.GCDTimer = DispatchSource.makeTimerSource(flags: [], queue: DispatchQueue.main)self.GCDTimer?.schedule(deadline: DispatchTime.now(), repeating: timeInterval)self.GCDTimer?.setEventHandler{DispatchQueue.main.async {handleBlock()}}self.GCDTimer?.resume()self.GCDTimer?.schedule(deadline: DispatchTime.now(), repeating: timeInterval)}else{self.stopOrResumeGCDTimer(isStop: false)}}/// 暂停或者重启GCDTimerfunc stopOrResumeGCDTimer(isStop: Bool){guard self.isSuspend != isStop else {return}isStop == true ? self.GCDTimer?.suspend() : self.GCDTimer?.resume()self.isSuspend = isStop}/// 销毁GCD定时器func invaliGCDTimer() {if self.isSuspend == true {self.GCDTimer?.resume()}self.GCDTimer?.cancel() //销毁前不能为suspend(挂起状态)self.GCDTimer = nil}
}

  

2.使用

    //倒计时var countdownTimer = ZDTimerTool()

  

适当地方开启定时器       countdownTimer.DispatchTimer(timeInterval: 1) { [weak self] inself?.handTimer()}

  

    func handTimer() {if self.remainingSeconds == 0{self.remainingSeconds = 60self.sendButton.setTitle("重新发送", for: .normal)self.sendButton.backgroundColor = UIColor.init(hexColor: "FF8E00")self.sendButton.isEnabled = trueself.countdownTimer.stopOrResumeGCDTimer(isStop: true)}else{sendButton.setTitle("\(remainingSeconds)秒后重新获取", for: .normal)self.sendButton.backgroundColor = UIColor.graysendButton.isEnabled = false}self.remainingSeconds -= 1}

  

转载于:https://www.cnblogs.com/qingzZ/p/10003279.html

swift - 添加定时器相关推荐

  1. java怎么加定时器_JAVA WEB程序中添加定时器

    JAVA WEB程序中添加定时器 //这是我的定时器类,用来定时执行某段任务: package com.my.time; import java.text.ParseException; import ...

  2. Swift - 添加纯净的Alamofire

    Swift - 添加纯净的Alamofire 如果你有代码洁癖,不能容忍任何多余的东西,请继续往下看.  1. 下载Alamofire (https://github.com/Alamofire/Al ...

  3. linux添加定时器防抖,linux驱动2.3按键中断-定时器防抖

    本节目标: 通过定时器来防止按键抖动,测试程序是使用上节的:阻塞操作的测试程序 一.引入 如下图所示,在没有定时器防抖情况下,按键没有稳定之前会多次进入中断,使得输出多个相同信息出来 按键波形图,如下 ...

  4. JavaScript事件添加定时器

    一日不见,如隔三秋 我还是你们熟悉的-- 世界上有两种东西,是无法挽回的,一种是过去的时间,另一种就是说过的话. 丰富自己比取悦他人更有力量:种下梧桐树,引得凤凰来.你若盛开,蝴蝶自来,你若精彩,天自 ...

  5. mysql添加定时器

    今天做项目的时候做一个签到,设了一个键判断是否签到.然后想到用mysql的定时器进行0点清零. 需要mysql5.1支持  select version(); 然后开始添加储存过程. delimite ...

  6. java 动态添加定时器_Spring整合Quartz实现动态定时器的示例代码

    一.版本说明 spring3.1以下的版本必须使用quartz1.x系列,3.1以上的版本才支持quartz 2.x,不然会出错. 原因:spring对于quartz的支持实现,org.springf ...

  7. java 动态添加定时器_quartz实现任务动态增加和删除

    场景 这几天做项目的时候遇到了个状态自动切换的场景.该场景具体情况如下: 用户可以创建多个活动 活动有开始时间和结束时间 活动有个状态:未上线.未开始(上线但未到开始时间).进行中(上线且处于开始时间 ...

  8. Swift - 添加、修改、删除通讯录联系人

    使用AddressBook.framework框架,我们除了可以很方便的获取通信录里的联系人.同时,还能对通讯录进行新增.修改.删除联系人操作. (注意:这些操作同查询一样,首先需要发起授权请求) 1 ...

  9. swift添加下拉刷新_React Native自定义下拉刷新组件

    React Native 自定义下拉刷新组件 PullToRefresh 针对猴急一些的同学,可以先在这个 Expo网站在线运行下demo看看效果 . 完整的代码,在 Github仓库 . 下拉刷新, ...

最新文章

  1. 深度学习最近发现详细分析报告
  2. 解读Raft(二 选举和日志复制)
  3. 【Android 安全】DEX 加密 ( 多 DEX 加载 | 65535 方法数限制和 MultiDex 配置 | PathClassLoader 类加载源码分析 | DexPathList )
  4. 项目Alpha冲刺——代码规范、本次冲刺任务与计划
  5. Oracle通过邀请Weaver和Chin推动JavaFX向前发展
  6. 进程共享(读时共享写时复制)
  7. Hadoop基础学习
  8. 设置按钮背景为透明去掉button按钮左右两边的留白
  9. javapythonc就业人数比例_P100 统计各年龄段的人数
  10. 医学知识图谱构建技术与研究进展
  11. source的作用详细讲解
  12. 使用 className 修改样式属性
  13. 〖Windows〗三星(SAMSUNG)905S3G-K07 安装Windows 7 过程分享
  14. 腾讯云服务器网站搭建教程(太简单了)
  15. 一文详解像素、DPI、分辨率之间的关系
  16. 如何修改项目中Git远程仓库地址?
  17. [Android开发常见问题-19] Android为什么比IOS和WP慢?
  18. <论文翻译>Relation Classification via Multi-Level Attention CNNs
  19. 手机误删的文件怎么恢复?
  20. 为何说Lisp是有史以来最牛的编程语言?

热门文章

  1. amqp rabbitmq_Spring AMQP RabbitMQ示例
  2. 常用PDF编辑工具 Adobe Acrobat、PDF-XChange Editor 、福昕PDF编辑器、PDFelement
  3. 开课吧:Java开发学习路线-基础知识
  4. display:none与visible:hidden的区别 ?
  5. 如何截取滚动的页面,窗口
  6. linux内核sysfs详解【转】
  7. [MySQL FAQ]系列 -- 如何利用触发器实现账户权限审计
  8. windows apache 负载均衡配置 Tomcat集群配置
  9. Spark on yarn 动态资源配置
  10. java设计模式--基础思想总结--抽象类与架构设计思想