增加换肤功能
This commit is contained in:
94
TUIKit/TUICallKit/TUICallKit-Swift/Utils/GCDTimer.swift
Normal file
94
TUIKit/TUICallKit/TUICallKit-Swift/Utils/GCDTimer.swift
Normal file
@@ -0,0 +1,94 @@
|
||||
//
|
||||
// GCDTimer.swift
|
||||
// TUICallKit
|
||||
//
|
||||
// Created by vincepzhang on 2023/2/13.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
typealias GCDTimerTaskEvent = () -> Void
|
||||
|
||||
class GCDTimer {
|
||||
|
||||
static var timerDic: [String: DispatchSourceTimer] = Dictionary()
|
||||
|
||||
static func start(interval:Int, repeats: Bool, async: Bool, task:@escaping GCDTimerTaskEvent) -> String {
|
||||
|
||||
let codeTimer = DispatchSource.makeTimerSource(queue: async ? DispatchQueue.global() : DispatchQueue.main)
|
||||
|
||||
let timerName = String(Date().timeIntervalSinceReferenceDate)
|
||||
timerDic[timerName] = codeTimer
|
||||
|
||||
codeTimer.schedule(deadline: .now(), repeating: .seconds(interval))
|
||||
codeTimer.setEventHandler(handler: {
|
||||
DispatchQueue.main.async {
|
||||
task()
|
||||
}
|
||||
if !repeats {
|
||||
self.cancel(timerName: timerName) {
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if codeTimer.isCancelled { return timerName}
|
||||
codeTimer.resume()
|
||||
return timerName
|
||||
}
|
||||
|
||||
static func cancel(timerName: String, task: @escaping GCDTimerTaskEvent) {
|
||||
if let timer = timerDic[timerName] {
|
||||
timer.cancel()
|
||||
timerDic.removeValue(forKey: timerName)
|
||||
}
|
||||
task()
|
||||
}
|
||||
|
||||
static func secondToHMS(second: Int) -> (hour: Int, min: Int, sec: Int) {
|
||||
var sec: Int = 0
|
||||
var min: Int = 0
|
||||
var hour: Int = 0
|
||||
|
||||
let oneHour = 3_600
|
||||
let oneMin = 60
|
||||
|
||||
hour = second / oneHour
|
||||
min = (second % oneHour) / oneMin
|
||||
sec = (second % oneHour) % oneMin
|
||||
|
||||
return (hour, min, sec)
|
||||
}
|
||||
|
||||
static func secondToHMSString(second: Int) -> String {
|
||||
let time = GCDTimer.secondToHMS(second: second)
|
||||
var hour: String
|
||||
var min: String
|
||||
var seconds: String
|
||||
|
||||
if time.hour <= 0 {
|
||||
hour = ""
|
||||
} else if time.hour >= 0 && time.hour < 10 {
|
||||
hour = "0\(time.hour):"
|
||||
} else {
|
||||
hour = String(time.hour) + ":"
|
||||
}
|
||||
|
||||
if time.min <= 0 {
|
||||
min = "00:"
|
||||
} else if time.min >= 0 && time.min < 10 {
|
||||
min = "0\(time.min):"
|
||||
} else {
|
||||
min = String(time.min) + ":"
|
||||
}
|
||||
|
||||
if time.sec <= 0 {
|
||||
seconds = "00"
|
||||
} else if time.sec >= 0 && time.sec < 10 {
|
||||
seconds = "0\(time.sec)"
|
||||
} else {
|
||||
seconds = String(time.sec)
|
||||
}
|
||||
|
||||
return "\(hour)\(min)\(seconds)"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user