Ich habe eine UIDatePicker
, die nur auf die Zeit beschränkt ist. Die App speichert die ausgewählte Zeit aus dem DatePicker in einer Variablen und wenn diese Zeit erreicht ist, wird eine UILocalNotification
ausgelöst.Zählzeit von der aktuellen Zeit bis zur bestimmten Zeit
So gibt es ein Etikett, das die verbleibende Zeit bis zur lokalen Benachrichtigung anzeigt. Es funktioniert im Prinzip wie ein Countdown-Timer. Wie kann ich das erreichen?
Date String: (für die fireDate Anzeigen)
func formatTimeForDisplay(date:NSDate) -> String {
let formatter = NSDateFormatter()
formatter.locale = NSLocale.currentLocale()
formatter.timeStyle = NSDateFormatterStyle.ShortStyle
return formatter.stringFromDate(date)
}
Erweiterung für NSLocalNotification: (für die NSDate von UIDatePicker zu fireDate für die LocalNotification Umwandlung)
extension NSDate {
var minute: Int {
return NSCalendar.currentCalendar().component(.Minute, fromDate: self)
}
var hour: Int {
return NSCalendar.currentCalendar().component(.Hour, fromDate: self)
}
var day: Int {
return NSCalendar.currentCalendar().component(.Day, fromDate: self)
}
var month: Int {
return NSCalendar.currentCalendar().component(.Month, fromDate: self)
}
var year: Int {
return NSCalendar.currentCalendar().component(.Year, fromDate: self)
}
var fireDate: NSDate {
let today = NSDate()
return NSCalendar.currentCalendar().dateWithEra(1,
year: today.year,
month: today.month,
day: { hour > today.hour || (hour == today.hour
&& minute > today.minute) ? today.day : today.day+1 }(),
hour: hour,
minute: minute,
second: 0,
nanosecond: 0
)!
}
Das funktioniert, aber es gibt mindestens zwei grundlegende Probleme mit dieser Lösung: 1.Lokalisierung (Sie können sich nicht darauf verlassen, dass Zeitkomponenten in allen Ländern und Sprachen auf dieselbe Weise formatiert sind). 2. Es gibt Situationen, in denen man sich nicht darauf verlassen kann, dass die Stunde 3600 Sekunden und der Tag 24 Stunden hat (siehe UTC für weitere Informationen). Es ist also vorzuziehen, dass das System es richtig handhabt. – Andriy
Ja, ich habe es bereits aktualisiert, um NSDateComponentsFormatter zu verwenden. – wottle
Nur eine Randnotiz: 'NSTimer' ist keine zuverlässige Möglichkeit, die verbleibende Zeit zu erkennen, da es manchmal aus ist ... – penatheboss