2016-07-31 28 views
0

Ich entwickle einen Countdown-Timer in meiner Anwendung, aber ich weiß nicht, warum es nicht funktioniert.Countdown-Timer swift

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() 

Wenn ich verlassen:

let startTime = NSDate() 

und kommentieren

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

es perfekt funktioniert, aber es geht von der aktuellen Uhrzeit und das Datum im Moment. Ich brauche ein bestimmtes Datum und Uhrzeit, in meinem Fall ist "05/12/16 0:00:00 a" und die Zeit sollte ab diesem Datum und dieser Stunde beginnen, nicht ab jetzt.

+0

Verwenden Sie nicht "dateFromString", um ein Datum zu bilden. Verwenden Sie Datumskomponenten. – matt

Antwort

1

Der Grund, warum nichts passiert, ist, weil Sie immer die gleichen zwei Daten vergleichen: startTime und endTime. Der Unterschied zwischen diesen beiden Daten wird immer genau gleich sein. Wenn Sie möchten, dass es einen allmählichen Countdown gibt, müssen Sie das eine oder andere entsprechend ändern. Der Grund, warum die NSDate() Version funktioniert, ist, weil sich startTime ändert - zu was auch immer das aktuelle Datum ist.

+0

Vielen Dank. Ich habe es jetzt sehr gut verstanden. In meinem Fall möchte ich eine Taste für 8 Stunden (08:00:00) deaktivieren und wenn diese Zeit vorbei ist, möchte ich die Taste erneut aktivieren. Hast du eine Idee, wie es geht? –

+0

Ich würde etwas tun, wo Sie die Zeit speichern, dass die Schaltfläche als 'NSDate' irgendwo wieder aktiviert werden sollte, und überprüfen Sie auf Ihrer regelmäßigen Basis, ob das Datum 'timeIntervalSinceNow()' dieses Datums größer als 0 ist. Wenn nicht, Die Schaltfläche kann wieder aktiviert werden. – Arclite