【问题标题】:Countdown timer swift倒计时快
【发布时间】:2025-12-17 08:35:01
【问题描述】:

我正在我的应用程序中开发一个倒数计时器,但我不知道为什么它不起作用。

let formatter = NSDateFormatter()
let userCalendar = NSCalendar.currentCalendar()
let requestedComponent: NSCalendarUnit = [
//NSCalendarUnit.Month,
//NSCalendarUnit.Day,
NSCalendarUnit.Hour,
NSCalendarUnit.Minute,
NSCalendarUnit.Second

]

  func printTime()
{
   formatter.dateFormat = "MM/dd/yy hh:mm:ss a"
    //let startTime = NSDate()
    let startTime = formatter.dateFromString("05/12/16 0:00:00 a")
    let endTime = formatter.dateFromString("12/25/16 8:00:00 a")
    let timeDifference = userCalendar.components(requestedComponent, fromDate: startTime!, toDate: endTime!, options: [])
    TimeLabel.text = " \(timeDifference.hour)Hours \(timeDifference.minute)Minutes \(timeDifference.second) Seconds"
}


    let timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true)
    timer.fire()

如果我离开:

let startTime = NSDate()

和评论

let startTime = formatter.dateFromString("05/12/16 0:00:00 a")

它运行良好,但它从当前时间和日期开始。 我需要一个具体的日期和时间,在我的例子中是“05/12/16 0:00:00 a”,时间应该从那个日期和时间开始倒计时,而不是从现在开始。

【问题讨论】:

  • 不要使用dateFromString 构成日期。使用日期组件。

标签: swift nsdate


【解决方案1】:

没有发生任何事情的原因是因为您总是比较相同的两个日期:startTimeendTime。这两个日期之间的差异将始终完全相同。如果您希望逐步倒计时,则需要相应地更改其中一个。 NSDate() 版本有效的原因是因为startTime 正在更改——无论当前日期是什么。

【讨论】:

  • 非常感谢。我现在非常了解它。就我而言,我想禁用一个按钮 8 小时(08:00:00),当这个时间结束时,我想再次启用该按钮。你知道怎么做吗?
  • 我会做一些事情,将按钮应该重新启用的时间存储为 NSDate 某处,并定期检查该日期的 timeIntervalSinceNow() 是否大于 0。如果不是,按钮可以重新启用。