我希望能够根据一天中的时间更改应用的背景颜色。我相信这样做的方法是说小时组件是否大于任何数字,将背景设置为夜间背景,否则它是白天背景。
为了测试我担心的事情,我扔了
timeLabel.text = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .NoStyle, timeStyle: .FullStyle)
进入viewDidLoad
。这显示了应用加载的时间。如果我杀了应用程序并完全重新加载它,这显然也会不断更新。
但是,如果用户进入主屏幕或转到其他应用程序,则返回到此时间不会更新。它将显示应用程序首次加载的时间。只有当用户完全杀死应用程序时,显然无法依赖该应用程序,才会显示正确的时间。
所以在我的例子中,如果我的"切换到夜间时间"是下午5点,如果用户在4:30加载,然后进入主屏幕,在下午5点加载应用程序,没有任何改变,因为存储的时间仍然是4:30。
我尝试在viewDidAppear
中抛出代码而没有任何改变。
当应用程序从主屏幕加载或从其他应用程序返回时,会运行什么代码?
答案 0 :(得分:5)
您想要关闭UIApplicationDidBecomeActiveNotification
事件。试试这个:
override func viewDidLoad()
{
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "applicationDidBecomeActive:",
name: UIApplicationDidBecomeActiveNotification,
object: nil)
}
func applicationDidBecomeActive(notification: NSNotification)
{
// do something when the app is active again.
timeLabel.text = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .NoStyle, timeStyle: .FullStyle)
}
答案 1 :(得分:3)
每次用户进入您的应用时,都会调用您的应用程序委托中的方法-applicationWillEnterForeground:
。
答案 2 :(得分:2)
您需要查看使用NSCalendar
:
let currentDate = NSDate() // You can input the custom as well
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: NSDate())
let currentHour = components.hour // You can play around with the ""components""
您正在使用以下方法:
applicationDidBecomeActive:
每次用户打开应用时都会调用它。