2016-07-31 147 views
0

我正在开发倒计时器在我的应用程序,但我不知道它为什么不工作。倒数计时器迅速

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”,时间应该从该日期和小时开始倒数,而不是从现在开始。

+0

请勿使用'dateFromString'来形成日期。使用日期组件。 – matt

回答

1

没有任何事情发生的原因是因为你总是比较相同的两个日期:startTimeendTime。这两个日期之间的差异将永远是完全一样的。如果你想要逐渐倒计时,你需要相应地改变一个或另一个。 NSDate()版本的原因是因为startTime正在改变 - 无论当前日期是什么。

+0

非常感谢。我现在非常了解它。 在我的情况下,我想禁用一个按钮8小时(08:00:00),当这个时间结束,我想再次启用按钮。 你有一个想法如何做到这一点? –

+0

我会做一些事情,你存储的时间,该按钮应该重新启用作为'NSDate'某处,并定期检查是否该日期'timeIntervalSinceNow()'大于0.如果不是,该按钮可以重新启用。 – Arclite