发布时间:2026/8/19 16:24:24
Swift5.2 Control CountDownManager(时间计时器) 一直觉得自己写的不是技术而是情怀一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的希望我的这条路能让你们少走弯路希望我能帮你们抹去知识的蒙尘希望我能帮你们理清知识的脉络希望未来技术之巅上有你们也有我。Swift-CountDownManager(时间计时器)代码下载使用场景当时写项目的时候用户进入确认订单后退出变成待支付计算用户未付款的时候超过时间后取消订单。效果展示代码使用代码importUIKitimportSnapKitclassViewController:UIViewController{privateletcountDownManagerCountDownManager()privatelettimeLabelUILabel()overridefuncviewDidLoad(){super.viewDidLoad()view.backgroundColor.whitesetupUI()startClockwiseTimer()}privatefuncsetupUI(){timeLabel.textAlignment.center timeLabel.fontUIFont.systemFont(ofSize:16,weight:.medium)timeLabel.textColor.black view.addSubview(timeLabel)timeLabel.snp.makeConstraints{makeinmake.center.equalToSuperview()}}privatefuncstartClockwiseTimer(){// 假设开始时间是 2026-08-18 10:00:00 的时间戳毫秒letstartTimestamp:Int641_720_000_000_000// 示例值请替换为实际值// 时间校准如果需要与服务器时间同步传入偏差值否则传 0letadjust:TimeInterval0countDownManager.clockwiseHasPasstimeWithStratTimeStamp(startTimestamp,adjust:adjust){[weakself]timeStringinself?.timeLabel.text已过时间\(timeString)}}}封装代码importFoundation class CountDownManager{private var timer: DispatchSourceTimer? privateletdateFormatter: DateFormatter{letformatterDateFormatter()formatter.dateFormatYYYY-MM-dd HH:mm:ssformatter.timeZoneTimeZone.currentreturnformatter}()deinit{destoryTimer()print(\(Self.self) deinit)}// MARK: - Public Methods /// 顺计时 /// - Parameters: /// - starTimeStamp: 开始时间戳(毫秒)/// - adjust: 时间校准值(秒)/// - completeBlock: 回调(已过时间字符串)func clockwiseHasPasstimeWithStratTimeStamp(_ starTimeStamp: Int64, adjust: TimeInterval, completeBlock: escaping(String)-Void){destoryTimer()letnowIntervalDate().timeIntervalSince1970 adjustletpassIntervalnowInterval - TimeInterval(starTimeStamp)/1000vartimeoutInt(passInterval)timerDispatchSource.makeTimerSource(queue: DispatchQueue.global())timer?.schedule(deadline: .now(), repeating:1.0)timer?.setEventHandler{[weak self]intimeout1lethourstimeout/(60*60)letminutes(timeout %(60*60))/60letsecondstimeout%60DispatchQueue.main.async{completeBlock(self?.refreshUI(hour: hours, minute: minutes, second: seconds)??)}}timer?.resume()}/// 计算已过时间 /// - Parameters: /// - starTimeStamp: 开始时间戳(毫秒)/// - finishTimeStamp: 结束时间戳(毫秒)/// - adjust: 时间校准值(秒)/// - completeBlock: 回调(已过时间字符串, 是否结束)func countDownHasPasstimeWithStratTimeStamp(_ starTimeStamp: Int64, finishTimeStamp: Int64, adjust: TimeInterval, completeBlock: escaping(String, Bool)-Void){destoryTimer()letnowIntervalDate().timeIntervalSince1970 adjustletpassIntervalnowInterval - TimeInterval(starTimeStamp)/1000letfinishIntervalTimeInterval(finishTimeStamp - starTimeStamp)/1000vartimeoutInt(passInterval)iftimeoutInt(finishInterval){timerDispatchSource.makeTimerSource(queue: DispatchQueue.global())timer?.schedule(deadline: .now(), repeating:1.0)timer?.setEventHandler{[weak self]invar isFinishfalseiftimeoutInt(finishInterval){self?.destoryTimer()isFinishtrue}else{timeout1}lethourstimeout/(60*60)letminutes(timeout %(60*60))/60letsecondstimeout%60DispatchQueue.main.async{completeBlock(self?.refreshUI(hour: hours, minute: minutes, second: seconds)??, isFinish)}}timer?.resume()}}/// 根据结束时间倒计时 /// - Parameters: /// - finishTimeStamp: 结束时间戳(毫秒)/// - adjust: 时间校准值(秒)/// - completeBlock: 回调(剩余时间字符串, 是否结束)func countDownWithFinishTimeStamp(_ finishTimeStamp: Int64, adjust: TimeInterval, completeBlock: escaping(String, Bool)-Void){letnowIntervalDate().timeIntervalSince1970 adjustletlastTimeIntervalTimeInterval(finishTimeStamp)/1000- nowInterval countDownWithTimeout(lastTimeInterval, completeBlock: completeBlock)}// MARK: - Private Methods private func countDownWithTimeout(_ timeOut: TimeInterval, completeBlock: escaping(String, Bool)-Void){destoryTimer()vartimeoutInt(timeOut)iftimeout0{timerDispatchSource.makeTimerSource(queue: DispatchQueue.global())timer?.schedule(deadline: .now(), repeating:1.0)timer?.setEventHandler{[weak self]iniftimeout0{self?.destoryTimer()DispatchQueue.main.async{completeBlock(self?.refreshUI(hour:0, minute:0, second:0)??,true)}}else{lethourstimeout/(60*60)letminutes(timeout %(60*60))/60letsecondstimeout%60DispatchQueue.main.async{completeBlock(self?.refreshUI(hour: hours, minute: minutes, second: seconds)??,false)}timeout-1}}timer?.resume()}else{completeBlock(refreshUI(hour:0, minute:0, second:0),true)}}private func refreshUI(hour: Int, minute: Int, second: Int)-String{var timeStrifhour0{timeStrString(format:%02d小时, hour)}timeStrString(format:%02d分钟, minute)timeStrString(format:%02d秒, second)returntimeStr}private func getNowyyyymmdd()-String{letnowDate()letformatDayDateFormatter()formatDay.dateFormatyyyy-MM-ddreturnformatDay.string(from: now)}/// 销毁定时器 funcdestoryTimer(){timer?.cancel()timernil}}

相关新闻

2026/8/19 16:24:24

羽毛球篮球约球小程序开发方案

羽毛球篮球约球小程序开发方案羽毛球、篮球是同城大众参与度最高的两类球类运动,二者组队规则、场地规格、参与人数、对局模式存在明显差异化特性。篮球偏向多人对抗组队,对局人数固定、团队配合要求高;羽毛球多为双人对战、四人双打&#xf…

2026/8/19 16:24:24

四层递归自指认知架构中自描述子系统(ADS)的角色研究

四层递归自指认知架构中自描述子系统(ADS)的角色研究 作者:方见华 单位:世毫九实验室 摘要 世毫九实验室(SH9)提出的四层递归自指认知架构,是突破传统AI“无内生自我认知、依赖外部人工标签、人…

2026/8/19 4:14:28

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/19 15:09:57

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/19 0:00:35

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:35

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:36

Agentic Web:构建智能体原生网络的基础设施挑战与四大支柱

1. 从“被动网络”到“能动网络”:一个正在发生的范式转移 如果你最近关注AI和Web技术的前沿动态,可能会频繁听到“Agentic Web”这个词。它不像“Web3”那样带着浓厚的金融色彩,也不像“元宇宙”那样充满科幻感,但它所描绘的未来…

2026/8/18 18:23:10

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/19 4:14:38

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/19 16:39:34

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…