当应用程序迅速出现在屏幕上时,如何运行功能?

时间:2019-01-20 14:22:44

标签: ios swift uiviewcontroller

我有一个要在应用程序出现在屏幕上时运行的功能。 我尝试了所有这些方法:

override func viewWillAppear() {
    generateRandomNumber()

}
override func viewDidAppear() {
    generateRandomNumber()
}
override func viewDidLoad() {
    generateRandomNumber()
}

尽管该函数在每次运行应用程序时都会运行,但是如果在运行应用程序后按Home botton并返回到应用程序(未终止该应用程序),则该函数不会再次执行。

更新:我尝试在ViewController中使用以下代码:

override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
    }
    @objc func applicationDidBecomeActive(notification: NSNotification) {
        generateRandomNumber()
    }

但是运行大约需要一秒钟。有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

在您的应用程序委托中,您想实现applicationDidBecomeActive。请注意,当关闭系统警报之类的内容时,此命令也将运行。如果只想从后台返回时运行某些内容,则需要applicationWillEnterForeground。有关完整的详细信息,请参阅UIApplicationDelegate文档中的“管理状态转换”和《 App编程指南》中的Strategies for Handling App State Transitions

您的方法看起来基本正确;为了使用willEnterForeground而不是didBecomeActive,这只是一个很小的变化:

override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self,
                                           selector: #selector(applicationWillEnterForeground),
                                           name: UIApplication.willEnterForegroundNotification,
                                           object: nil)
}

@objc func applicationWillEnterForeground(notification: Notification) {
    generateRandomNumber()
}

这里唯一要注意的是,只要视图控制器存在,此观察者就一直有效,即使它当前不在屏幕上(最常见的情况是当它出现在其他视图控制器上时) )。在某些情况下,这是有问题的,您应该调用addObserver中的viewWillAppearremoveObserver中的viewDidDisappear,而不要使用viewDidLoad