从主屏幕加载应用程序时调用哪个函数?

时间:2016-06-07 01:10:43

标签: ios swift nsdate

我希望能够根据一天中的时间更改应用的背景颜色。我相信这样做的方法是说小时组件是否大于任何数字,将背景设置为夜间背景,否则它是白天背景。

为了测试我担心的事情,我扔了

timeLabel.text = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .NoStyle, timeStyle: .FullStyle)

进入viewDidLoad。这显示了应用加载的时间。如果我杀了应用程序并完全重新加载它,这显然也会不断更新。

但是,如果用户进入主屏幕或转到其他应用程序,则返回到此时间不会更新。它将显示应用程序首次加载的时间。只有当用户完全杀死应用程序时,显然无法依赖该应用程序,才会显示正确的时间。

所以在我的例子中,如果我的"切换到夜间时间"是下午5点,如果用户在4:30加载,然后进入主屏幕,在下午5点加载应用程序,没有任何改变,因为存储的时间仍然是4:30。

我尝试在viewDidAppear中抛出代码而没有任何改变。

当应用程序从主屏幕加载或从其他应用程序返回时,会运行什么代码?

3 个答案:

答案 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:每次用户打开应用时都会调用它。