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

oce*_*ock 1 uiviewcontroller ios swift

我有一个功能,每当应用程序出现在屏幕上时,我都想运行该功能。我尝试了所有这些方法:

override func viewWillAppear() {
    generateRandomNumber()

}
override func viewDidAppear() {
    generateRandomNumber()
}
override func viewDidLoad() {
    generateRandomNumber()
}
Run Code Online (Sandbox Code Playgroud)

虽然每次运行应用程序时该功能都会运行,但是如果在运行应用程序后我按下主页按钮并返回应用程序(未终止应用程序),则该功能不会再次执行。

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

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

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

Rob*_*ier 5

在您的应用程序委托中,您希望实现applicationDidBecomeActive. 请注意,当系统警报之类的事情被解除时,这也会运行。如果您只想在从后台返回时运行某些内容,则需要applicationWillEnterForeground. 有关完整详细信息,请参阅UIApplicationDelegate文档中的“管理状态转换”和应用程序编程指南中的处理应用程序状态转换的策略

你的方法看起来基本正确;为了使用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()
}
Run Code Online (Sandbox Code Playgroud)

这里唯一需要注意的是,只要视图控制器存在,这个观察者就会继续有效,即使它当前不在屏幕上(最常见的情况是当它呈现给其他视图控制器时)。在某些情况下,这是一个问题,您应该调用addObserverinviewWillAppearremoveObserverinviewDidDisappear而不是使用viewDidLoad.