swift - 添加定时器
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 - 添加定时器相关推荐
- java怎么加定时器_JAVA WEB程序中添加定时器
JAVA WEB程序中添加定时器 //这是我的定时器类,用来定时执行某段任务: package com.my.time; import java.text.ParseException; import ...
- Swift - 添加纯净的Alamofire
Swift - 添加纯净的Alamofire 如果你有代码洁癖,不能容忍任何多余的东西,请继续往下看. 1. 下载Alamofire (https://github.com/Alamofire/Al ...
- linux添加定时器防抖,linux驱动2.3按键中断-定时器防抖
本节目标: 通过定时器来防止按键抖动,测试程序是使用上节的:阻塞操作的测试程序 一.引入 如下图所示,在没有定时器防抖情况下,按键没有稳定之前会多次进入中断,使得输出多个相同信息出来 按键波形图,如下 ...
- JavaScript事件添加定时器
一日不见,如隔三秋 我还是你们熟悉的-- 世界上有两种东西,是无法挽回的,一种是过去的时间,另一种就是说过的话. 丰富自己比取悦他人更有力量:种下梧桐树,引得凤凰来.你若盛开,蝴蝶自来,你若精彩,天自 ...
- mysql添加定时器
今天做项目的时候做一个签到,设了一个键判断是否签到.然后想到用mysql的定时器进行0点清零. 需要mysql5.1支持 select version(); 然后开始添加储存过程. delimite ...
- java 动态添加定时器_Spring整合Quartz实现动态定时器的示例代码
一.版本说明 spring3.1以下的版本必须使用quartz1.x系列,3.1以上的版本才支持quartz 2.x,不然会出错. 原因:spring对于quartz的支持实现,org.springf ...
- java 动态添加定时器_quartz实现任务动态增加和删除
场景 这几天做项目的时候遇到了个状态自动切换的场景.该场景具体情况如下: 用户可以创建多个活动 活动有开始时间和结束时间 活动有个状态:未上线.未开始(上线但未到开始时间).进行中(上线且处于开始时间 ...
- Swift - 添加、修改、删除通讯录联系人
使用AddressBook.framework框架,我们除了可以很方便的获取通信录里的联系人.同时,还能对通讯录进行新增.修改.删除联系人操作. (注意:这些操作同查询一样,首先需要发起授权请求) 1 ...
- swift添加下拉刷新_React Native自定义下拉刷新组件
React Native 自定义下拉刷新组件 PullToRefresh 针对猴急一些的同学,可以先在这个 Expo网站在线运行下demo看看效果 . 完整的代码,在 Github仓库 . 下拉刷新, ...
最新文章
- 深度学习最近发现详细分析报告
- 解读Raft(二 选举和日志复制)
- 【Android 安全】DEX 加密 ( 多 DEX 加载 | 65535 方法数限制和 MultiDex 配置 | PathClassLoader 类加载源码分析 | DexPathList )
- 项目Alpha冲刺——代码规范、本次冲刺任务与计划
- Oracle通过邀请Weaver和Chin推动JavaFX向前发展
- 进程共享(读时共享写时复制)
- Hadoop基础学习
- 设置按钮背景为透明去掉button按钮左右两边的留白
- javapythonc就业人数比例_P100 统计各年龄段的人数
- 医学知识图谱构建技术与研究进展
- source的作用详细讲解
- 使用 className 修改样式属性
- 〖Windows〗三星(SAMSUNG)905S3G-K07 安装Windows 7 过程分享
- 腾讯云服务器网站搭建教程(太简单了)
- 一文详解像素、DPI、分辨率之间的关系
- 如何修改项目中Git远程仓库地址?
- [Android开发常见问题-19] Android为什么比IOS和WP慢?
- <论文翻译>Relation Classification via Multi-Level Attention CNNs
- 手机误删的文件怎么恢复?
- 为何说Lisp是有史以来最牛的编程语言?
热门文章
- amqp rabbitmq_Spring AMQP RabbitMQ示例
- 常用PDF编辑工具 Adobe Acrobat、PDF-XChange Editor 、福昕PDF编辑器、PDFelement
- 开课吧:Java开发学习路线-基础知识
- display:none与visible:hidden的区别 ?
- 如何截取滚动的页面,窗口
- linux内核sysfs详解【转】
- [MySQL FAQ]系列 -- 如何利用触发器实现账户权限审计
- windows apache 负载均衡配置 Tomcat集群配置
- Spark on yarn 动态资源配置
- java设计模式--基础思想总结--抽象类与架构设计思想