Как определить, работает ли другое приложение в слайде в iOS 11?

Функции многозадачности получили обновления в iOS 11, один из которых был слайд-шоу, который показан в приведенном ниже формате.

введите описание изображения здесь

С этими изменениями уже невозможно использовать методы которые проверяют размер фрейма от iOS 9, чтобы определить, является ли другое приложение "слайдом" над моим приложением.

Есть ли какой-нибудь новый метод для определения того, работает ли другое приложение с помощью слайда?

Ответ 1

Мне удалось довольно легко заставить это работать на iPad Pro (который поддерживает параллельные приложения, а не только слайдеры). Вот код:

class ViewController: UIViewController {

    override func viewWillLayoutSubviews() {
        isThisAppFullScreen()
    }

    @discardableResult func isThisAppFullScreen() -> Bool {
        let isFullScreen = UIApplication.shared.keyWindow?.frame == UIScreen.main.bounds
        print("\(#function) - \(isFullScreen)")
        return isFullScreen
    }
}

Конечным результатом является то, что он напечатает "true", если представление полноэкранное, и "false", если он использует экран совместно с другим приложением, и запускается каждый раз, когда что-либо отображается, скрывается или изменяется.

Тогда проблема заключается в старых устройствах, которые поддерживают только сдвиг. С их помощью ваше приложение больше не изменяется. Вместо этого он просто отказывается от активного использования, а другое приложение становится активным.

В этом случае все, что вы можете сделать, это вставить логику в AppDelegate для поиска applicationWillResignActive и applicationDidBecomeActive. Когда вы скользите, вы получаете applicationWillResignActive, но не applicationDidEnterBackground.

Вы можете посмотреть на это как на возможность, но вы не можете отличить скольжение и просмотр уведомлений от скольжения вниз с верхней части экрана. По этой причине он не идеален, но мониторинг жизненного цикла приложения - это, вероятно, лучшее, что вы можете сделать.