#ios #sprite-kit
#iOS #sprite-kit
Вопрос:
Я работаю над игрой SpriteKit, и всякий раз, когда я нажимаю кнопку home, а затем возвращаюсь в приложение, мое ожидаемое поведение будет заключаться в том, что игра приостанавливается, но фактическое поведение заключается в перезапуске приложения и загрузке главного меню.
Для игры, чтобы игра приостанавливала работу приложения при получении телефонного звонка / выходе из приложения и возвращении обратно, у меня есть следующий код:
NotificationCenter.default.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.willResignActiveNotification, object: nil)
Внутри appMovedToBackground
выполняется логика приостановки. Это отлично работает для устройств на iOS 12 или ниже. Однако тестирование на устройстве под управлением iOS 13, и оно работает не так, как ожидалось. Это приостанавливает игру при открытии Центра уведомлений или Центра управления или просто при открытии панели многозадачности (двойным щелчком кнопки «Домой»), но при закрытии приложения (простым нажатием кнопки «Домой») или переключении приложений, а затем возвращении приложение перезапускается в главном меню.
Я не верю, что логика приостановки актуальна, поскольку, когда я удалил всю эту логику, приложение все равно перезагружается. Я хотел бы иметь возможность закрыть приложение, снова открыть его и возобновить работу в игровой сцене.
При закрытии приложения в консоли регистрируется следующее сообщение:
SKView: ignoreRenderSyncInLayoutSubviews is NO. Call _renderSynchronouslyForTime without handler
Я просмотрел это, и все ведет обратно к этому источнику, в котором говорится, что это можно игнорировать, однако, если я закрою приложение и открою приложение до того, как это сообщение будет зарегистрировано, тогда наблюдается ожидаемое поведение, поэтому я верю, что это может быть связано.