Je travaille sur un jeu pour iOS codé en Swift. J'ai essayé de trouver un moyen de détecter le moment où l'application passe en mode arrière-plan ou est interrompue pour d'autres raisons, par exemple un appel téléphonique, mais ne trouve rien. Comment fait-on ça?
modifier/mettre à jour: Xcode 10 • Swift 4.2
Vous pouvez ajouter un observateur à votre contrôleur de vue pour UIApplication.willResignActiveNotification
NotificationCenter.default.addObserver(self, selector: #selector(willResignActive), name: UIApplication.willResignActiveNotification, object: nil)
et ajoutez une méthode de sélecteur à votre contrôleur de vue qui sera exécutée lorsque votre application recevra cette notification:
@objc func willResignActive(_ notification: Notification) {
// code to execute
}
Swift3
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: Notification.Name.UIApplicationWillResignActive, object: nil)
func appMovedToBackground() {
print("App moved to background!")
}
Pour détecter l'application entre en arrière-plan, vous pouvez vérifier dans appDelegate.m Trouver la méthode de délégation de l'application.
applicationDidEnterBackground
Cette méthode sera appelée une fois l'application en arrière-plan.
Examinez les méthodes de délégation définies dans votre instance de UIApplicationDeletegate
(appelée AppDelegate.m
par défaut). Les éléments suivants seraient utiles:
- (void)applicationWillResignActive:(UIApplication *)application
Cette méthode est appelée pour indiquer à votre application qu'elle est sur le point de passer de l'état actif à l'état inactif. Cela peut se produire pour certains types d'interruptions temporaires (comme un appel téléphonique entrant ou un message SMS) ou lorsque l'utilisateur quitte l'application et commence à passer à l'état d'arrière-plan. Une application à l'état inactif continue de s'exécuter, mais ne distribue pas les événements entrants aux répondeurs.
Tiré de la documentation Apple - ici
Dans Swift 4 et iOS 12: Pour observer l'application entre background event, ajoutez ce code à votre méthode viewDidLoad () .
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
@objc func appMovedToBackground() {
// do whatever event you want
}
vous devez utiliser UIApplication.didEnterBackgroundNotification . Si vous souhaitez savoir si l'application est arrivée sur foreground event, utilisez UIApplication.willEnterForegroundNotification
Donc, le code complet sera:
override func viewDidLoad() {
super.viewDidLoad()
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
notificationCenter.addObserver(self, selector: #selector(appCameToForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
// Do any additional setup after loading the view.
}
@objc func appMovedToBackground() {
print("app enters background")
}
@objc func appCameToForeground() {
print("app enters foreground")
}