Swift 倒数计时器逻辑
Swift countDown timer Logic
我正在创建一个按天、小时和秒计算的倒数计时器。我目前将它们存储在 String 数组中,同时还将它们转换为 Int(使用 map()
),以便在将值放入标签时可以 countdown/decrement。
打印到日志时的当前输出是:["[68168]", "[68188]", "[68243]", "[68281]"]
我在构建倒计时函数的逻辑时遇到问题,因此当秒数达到“0”时,1 分钟下降,59 分钟后 1 小时递减,等等,直到它达到“00:00 :00”。
在每个索引中,我有[小时、分钟、秒] 的 3 个值。但是我有几个索引。
目前我正在计算小时 * 3600,分钟 * 60 + 秒。我的问题是如何在 countDown 函数中将其划分并分解...
这是我的代码:
//Here I'm querying and converting the objects into Hour, Minute, Seconds.
var createdAt = object.createdAt
if createdAt != nil {
let calendar = NSCalendar.currentCalendar()
let comps = calendar.components([.Hour, .Minute, .Second], fromDate: createdAt as NSDate!)
let hour = comps.hour * 3600
let minute = comps.minute * 60
let seconds = comps.second
let intArray = [hour, minute, seconds]
//Now i'm appending to the String array below.
self.timeCreatedString.append("\(intArray)")
var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("countDown"), userInfo: nil, repeats: true)
}
func countDown() {
//completely stuck as to how to decrement/divide up the values so that I can display it as: 23:49:01 (Hours, minutes, seconds).
}
我怎样才能使每个索引中的每个元素分别倒计时?例如:“23:59:59”
PS,这是在 TableViewController 上构建的。 我想将其打印到 cell[=33 中的标签=] cellForRowAtIndexPath
方法中的视图控制器
将您的倒计时时间以秒为单位保存在一个名为 countdown
:
的变量中
var countdown = 7202 // two hours and two seconds
当需要显示时,将其分解为hours
、minutes
和seconds
,并使用String(format:)
构造函数对其进行格式化:
// loop 5 times to demo output
for _ in 1...5 {
let hours = countdown / 3600
let minsec = countdown % 3600
let minutes = minsec / 60
let seconds = minsec % 60
print(String(format: "%02d:%02d:%02d", hours, minutes, seconds))
countdown--
}
输出:
02:00:02
02:00:01
02:00:00
01:59:59
01:59:58
如果您有多个计时器,请将它们保存在一个数组中:
// Array holding 5 different countdown timers referred to as
// timers[0], timers[1], timers[2], timers[3] and timers[4]
var timers = [59, 61, 1000, 3661, 12345]
for i in 0 ..< times.count {
let hours = timers[i] / 3600
let minsec = timers[i] % 3600
let minutes = minsec / 60
let seconds = minsec % 60
print(String(format: "%02d:%02d:%02d", hours, minutes, seconds))
}
输出:
00:00:59
00:01:01
00:16:40
01:01:01
03:25:45
我正在创建一个按天、小时和秒计算的倒数计时器。我目前将它们存储在 String 数组中,同时还将它们转换为 Int(使用 map()
),以便在将值放入标签时可以 countdown/decrement。
打印到日志时的当前输出是:["[68168]", "[68188]", "[68243]", "[68281]"]
我在构建倒计时函数的逻辑时遇到问题,因此当秒数达到“0”时,1 分钟下降,59 分钟后 1 小时递减,等等,直到它达到“00:00 :00”。
在每个索引中,我有[小时、分钟、秒] 的 3 个值。但是我有几个索引。
目前我正在计算小时 * 3600,分钟 * 60 + 秒。我的问题是如何在 countDown 函数中将其划分并分解...
这是我的代码:
//Here I'm querying and converting the objects into Hour, Minute, Seconds.
var createdAt = object.createdAt
if createdAt != nil {
let calendar = NSCalendar.currentCalendar()
let comps = calendar.components([.Hour, .Minute, .Second], fromDate: createdAt as NSDate!)
let hour = comps.hour * 3600
let minute = comps.minute * 60
let seconds = comps.second
let intArray = [hour, minute, seconds]
//Now i'm appending to the String array below.
self.timeCreatedString.append("\(intArray)")
var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("countDown"), userInfo: nil, repeats: true)
}
func countDown() {
//completely stuck as to how to decrement/divide up the values so that I can display it as: 23:49:01 (Hours, minutes, seconds).
}
我怎样才能使每个索引中的每个元素分别倒计时?例如:“23:59:59”
PS,这是在 TableViewController 上构建的。 我想将其打印到 cell[=33 中的标签=] cellForRowAtIndexPath
方法中的视图控制器
将您的倒计时时间以秒为单位保存在一个名为 countdown
:
var countdown = 7202 // two hours and two seconds
当需要显示时,将其分解为hours
、minutes
和seconds
,并使用String(format:)
构造函数对其进行格式化:
// loop 5 times to demo output
for _ in 1...5 {
let hours = countdown / 3600
let minsec = countdown % 3600
let minutes = minsec / 60
let seconds = minsec % 60
print(String(format: "%02d:%02d:%02d", hours, minutes, seconds))
countdown--
}
输出:
02:00:02 02:00:01 02:00:00 01:59:59 01:59:58
如果您有多个计时器,请将它们保存在一个数组中:
// Array holding 5 different countdown timers referred to as
// timers[0], timers[1], timers[2], timers[3] and timers[4]
var timers = [59, 61, 1000, 3661, 12345]
for i in 0 ..< times.count {
let hours = timers[i] / 3600
let minsec = timers[i] % 3600
let minutes = minsec / 60
let seconds = minsec % 60
print(String(format: "%02d:%02d:%02d", hours, minutes, seconds))
}
输出:
00:00:59 00:01:01 00:16:40 01:01:01 03:25:45