Swift3.0 GCD定時器的使用DEMO。本站提示廣大學習愛好者:(Swift3.0 GCD定時器的使用DEMO)文章只能為提供參考,不一定能成為您想要的結果。以下是Swift3.0 GCD定時器的使用DEMO正文
直接看主要代碼
//截止日期 let endDate = datePicker.date //開始日期 let startDate = Date() //時間間隔 let timeInterval:TimeInterval = endDate.timeIntervalSince(startDate) if timer == nil { //剩余時間 var timeout = timeInterval if timeout != 0 { //創建全局隊列 let queue = DispatchQueue.global() //在全局隊列下創建一個時間源 timer = DispatchSource.makeTimerSource(flags: [], queue: queue) //設定循環的間隔是一秒,並且立即開始 timer?.scheduleRepeating(wallDeadline: DispatchWallTime.now(), interval: .seconds(1)) //時間源出發事件 timer?.setEventHandler(handler: { //必須是當前日期往後的日期,在datePicker上也做了限制 if timeout <= 0 { self.timer?.cancel() self.timer = nil DispatchQueue.main.async(execute: { self.day.text = "00" self.hour.text = "00" self.minute.text = "00" self.second.text = "00" }) } else { //計算剩余時間 let days = Int(timeout) / (3600 * 24) if days == 0 { self.day.text = "" } let hours = (Int(timeout) - Int(days) * 24 * 3600) / 3600 let minutes = (Int(timeout) - Int(days) * 24 * 3600 - Int(hours) * 3600) / 60 let seconds = Int(timeout) - Int(days) * 24 * 3600 - Int(hours) * 3600 - Int(minutes) * 60 //主隊列中刷新UI DispatchQueue.main.async(execute: { if days == 0 { self.day.text = "0" } else { self.day.text = "\(days)" } if hours < 10 { self.hour.text = "0" + "\(hours)" } else { self.hour.text = "\(hours)" } if minutes < 10 { self.minute.text = "0" + "\(minutes)" } else { self.minute.text = "\(minutes)" } if seconds < 10 { self.second.text = "0" + "\(seconds)" } else { self.second.text = "\(seconds)" } }) timeout -= 1 } }) //啟動時間源 timer?.resume() } }
DEMO效果圖
DEMO下載地址
[db:作者簡介][db:原文翻譯及解析]