2016-07-31 11 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

何も起こっていない理由は、常に同じ2つの日付:startTimeendTimeを比較しているためです。これら2つの日付の違いは常に同じです。段階的なカウントダウンが必要な場合は、それに応じてどちらか一方を変更する必要があります。 NSDate()のバージョンが機能する理由は、startTimeが現在の日付に変更されているためです。

+0

ありがとうございました。私は今それをとてもよく理解していました。 私の場合、8時間(08:00:00)ボタンを無効にしたいが、この時間が過ぎるともう一度ボタンを有効にしたい。 あなたはそれを行う方法がありますか? –

+0

ボタンをNSDateとして再有効化する必要がある場所をどこかに保存し、その日の 'timeIntervalSinceNow()'が0より大きいか定期的にチェックします。そうでない場合は、ボタンを再度有効にすることができます。 – Arclite

関連する問題