Концепция UIScene не ясна - PullRequest
10 голосов
/ 07 мая 2020

Прежде чем мы все привыкнем к подходу, когда в AppDelegate мы создаем UIWindow, а затем устанавливаем rootViewController для этого Window. Иногда, когда нам нужно иметь настраиваемое предупреждение, мы можем создать новый UIWindow, который будет выше.

Теперь Xcode автоматически создает UIScene и создает базу UIWindow на этой сцене. Я был бы признателен, если бы кто-нибудь мог подробно объяснить, как использовать эти сцены в реальной жизни и каковы их основные преимущества от использования только UIWindow в AppDelegate

, потому что эта статья не делает ' я многое объясняю

Ответы [ 2 ]

3 голосов
/ 14 мая 2020

Самое главное, что в сценах настроена поддержка нескольких окон (в настоящее время доступно только на iPadOS и macOS). Это также полезно для настройки SwiftUI на iOS.

SceneDelegate управляет тем, что отображается на экране, «для управления событиями жизненного цикла в одном экземпляре пользовательского интерфейса вашего приложения». , а AppDelegate контролирует весь жизненный цикл вашего приложения.

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

Надеюсь, это немного проясняет ситуацию и дает вам представление о том, почему Apple обновляет реализацию.

В этой статье приводятся некоторые дополнительные данные о SceneDelegate, которые могут оказаться полезными: https://www.donnywals.com/understanding-the-ios-13-scene-delegate/

2 голосов
/ 17 мая 2020

Документация

Вы должны прочитать Статью о приложении и среде из Apple вместо UIScene документации.

Объяснение

Как говорится о сценах :

Сцена, одновременное управление несколькими экземплярами пользовательского интерфейса вашего приложения и направление ресурсов в соответствующий экземпляр вашего пользовательского интерфейса.

Тогда у нас была только одна сцена, до iOS 13, поэтому единственное, что нам нужно для одновременного запуска ViewController s, это несколько Window s друг над другом . Но теперь у каждого приложения может быть одновременно запущено несколько экземпляров! Каждая сцена имеет свое собственное состояние, и она может быть на переднем плане, в то время как другие на заднем плане или приостановлены , в то время как Window полностью зависит от самого приложения.

Представьте, что у нас есть 2 контроллера просмотра (примите во внимание, что сцен нет), работающих на левой и правой стороне устройства, а затем нам нужно показать баннер. Использование старого метода окна покажет баннер на них обоих! И если вам нужно выбрать один, вы можете в конечном итоге найти правильный контроллер и показать на нем баннер (я думаю, что все мы использовали этот метод, прежде чем ознакомиться с UIWindow)

Итак, компания Apple представила Scene, контейнер для каждого отдельного экземпляра приложения. Таким образом, вы можете управлять каждым из них по отдельности, и каждое из них действует как отдельное приложение. У него свои window s и controller s. Но все они управляются одним объектом, UIApplication.shared, и у него есть delegate для обработки общих событий (обычно извне приложения) и всего жизненного цикла приложения.

...