迅速
短い答え
NotificationCenter
ではなくオブザーバを使用してくださいviewWillAppear
。
override func viewDidLoad() {
super.viewDidLoad()
// set observer for UIApplication.willEnterForegroundNotification
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
// my selector that was defined above
@objc func willEnterForeground() {
// do stuff
}
長い答え
アプリがバックグラウンドから戻るタイミングを確認するには、NotificationCenter
ではなくオブザーバーを使用しviewWillAppear
ます。これは、どのイベントがいつ発生するかを示すサンプルプロジェクトです。(これは、このObjective-Cの回答を改変したものです。)
import UIKit
class ViewController: UIViewController {
// MARK: - Overrides
override func viewDidLoad() {
super.viewDidLoad()
print("view did load")
// add notification observers
NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
override func viewWillAppear(_ animated: Bool) {
print("view will appear")
}
override func viewDidAppear(_ animated: Bool) {
print("view did appear")
}
// MARK: - Notification oberserver methods
@objc func didBecomeActive() {
print("did become active")
}
@objc func willEnterForeground() {
print("will enter foreground")
}
}
アプリを初めて起動したときの出力順序は次のとおりです。
view did load
view will appear
did become active
view did appear
ホームボタンを押してからアプリをフォアグラウンドに戻した後の出力順序は次のとおりです。
will enter foreground
did become active
したがって、もともと使用しようとしていたviewWillAppear
場合UIApplication.willEnterForegroundNotification
は、おそらくあなたが望むものです。
注意
iOS 9以降では、オブザーバーを削除する必要はありません。ドキュメントの状態:
アプリがiOS 9.0以降またはmacOS 10.11以降をターゲットにしている場合、そのdealloc
メソッドでオブザーバーの登録を解除する必要はありません。
applicationWillEnterForeground:
して、アプリケーションがいつアクティブな状態になったかを判断する必要があります。