Я работаю над игрой для iOS, закодированной в Swift. Я попытался найти способ обнаружить, когда приложение переходит в фоновый режим или прервано по другим причинам, например, по телефону, но ничего не может найти. Как это сделать?
Обнаружение приложения iOS в фоновом режиме
Ответ 1
редактировать/обновлять: Xcode 10 • Swift 4.2
Вы можете добавить наблюдателя в свой контроллер представления для UIApplication.willResignActiveNotification
NotificationCenter.default.addObserver(self, selector: #selector(willResignActive), name: UIApplication.willResignActiveNotification, object: nil)
и добавьте метод селектора к вашему контроллеру представления, который будет выполняться, когда ваше приложение получит это уведомление:
@objc func willResignActive(_ notification: Notification) {
// code to execute
}
Ответ 2
Чтобы обнаружить приложение, входящее в фон, вы можете проверить приложение appDelegate.m найти метод делегирования приложения
applicationDidEnterBackground
Этот метод будет вызван, как только приложение войдет в фон.
Ответ 3
Swift3
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: Notification.Name.UIApplicationWillResignActive, object: nil)
func appMovedToBackground() {
print("App moved to background!")
}
Ответ 4
Взгляните на методы делегата, определенные в вашем экземпляре UIApplicationDeletegate
(по умолчанию AppDelegate.m
). В частности, было бы полезно следующее:
- (void)applicationWillResignActive:(UIApplication *)application
Этот метод вызывается, чтобы сообщить вашему приложению, что он собирается перейти из активного состояния в неактивное. Это может произойти для определенных типов временных прерываний (например, входящего телефонного звонка или SMS-сообщения) или когда пользователь покидает приложение и начинает переход в фоновое состояние. Приложение в неактивном состоянии продолжает работать, но не отправляет входящие события респондентам.
Взято из документации Apple - здесь
Ответ 5
В swift 4 и iOS 12: чтобы наблюдать, как приложение входит в фоновое событие, добавьте этот код в метод viewDidLoad().
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
@objc func appMovedToBackground() {
// do whatever event you want
}
Вы должны использовать UIApplication.didEnterBackgroundNotification. Если вы хотите увидеть, пришло ли приложение на событие переднего плана, используйте UIApplication.willEnterForegroundNotification
Итак, полный код будет:
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")
}