我有一个UIDatePicker
,仅限时间。该应用程序将datePicker中的选定时间保存在变量中,当达到此时间时,它会触发UILocalNotification
。
因此,有一个标签显示本地通知触发前的剩余时间。所以它基本上有点像倒数计时器。 我怎样才能做到这一点?
Date to String :(用于显示fireDate)
func formatTimeForDisplay(date:NSDate) -> String {
let formatter = NSDateFormatter()
formatter.locale = NSLocale.currentLocale()
formatter.timeStyle = NSDateFormatterStyle.ShortStyle
return formatter.stringFromDate(date)
}
NSLocalNotification的扩展:(用于将NSDate从UIDatePicker转换为用于LocalNotification的fireDate)
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
)!
}
答案 0 :(得分:0)
要显示用户友好的字符串,如果您的应用针对的是iOS 8及更高版本,则可以参考 # The default HTTP method used to sign out a resource. Default is :delete.
if Rails.env.test?
config.sign_out_via = :get
else
config.sign_out_via = :delete
end
。
此外,您可能会遇到一个问题。 NSDateComponentsFormatter
返回一个UIDatePicker
对象,它封装了从2001年1月1日起的秒数。即使您在日期选择器中只看到时间组件。
这意味着,您应该注意NSDate
的{{1}}值,也许"修复"使用date
API。
答案 1 :(得分:0)
为此,您需要使用NSTimer
来更新倒计时标签。
在ViewController中,为计时器创建一个变量。
var timer = NSTimer()
我还设置了一个临时变量来保存未来的日期 - 你没有发布代码,所以我不确定你的名字是什么。在我的代码中,我将其称为futureDate
let futureDate = NSDate().dateByAddingTimeInterval(60*60*2.4)
当您使用选择日期并希望倒计时开始时,您将需要启动计时器触发以调用将更新标签的方法。在这个例子中,我称之为updateTimeLeft
。
timer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "updateTimeLeft", userInfo: nil, repeats: true)
然后,我们只需要计算本地通知将要触发的现在和未来日期之间的差异。我们在updateTimeLeft
方法中执行此操作。在我的代码中,我IBOutlet
的{{1}}名为UILabel
。
timeLeft