Понимание Windows и экранов

Окно обрабатывает полное представление пользовательского интерфейса Вашего приложения. Работа Windows с представлениями (и их владение просматривают контроллеры) управлять взаимодействиями с — и изменениями в — видимая иерархия представления.

Каждое приложение имеет одно окно, выводящее на экран пользовательский интерфейс приложения на основанном на iOS дисплее устройства. Если внешний дисплей подключен к устройству, приложение может создать второе окно для представления содержания на том дисплее также.

Роль Окна в приложении для iOS

В приложении для iOS окна играют совсем другую роль, чем делают окна в приложении Mac. В iOS окна не имеют строк заголовка, рамок для закрытия или любых других визуальных украшений. Пользователи не видят, закрывают или перемещают окно приложения для iOS. И вместо того, чтобы открыть другое окно для отображения нового содержания — который является общим поведением в приложениях Mac — приложение для iOS изменяет представления в своем окне.

Объект окна — т.е. экземпляр UIWindow— имеет несколько важной ответственности:

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

Корневое представление окна содержит Ваше содержание

Окно имеет единственный корневой объект контроллера представления, содержащий все другие представления, представляющие Ваше содержание. Используя единственное корневое представление контроллер упрощает процесс изменения Вашего интерфейса, потому что для отображения нового содержания все, что необходимо сделать, заменить старый корневой контроллер представления новым. Самый простой способ установить корневое представление в окно состоит в том, чтобы использовать раскадровки для определения пользовательского интерфейса приложения (чтобы изучить, как раскадровки помогают Вам определить свой UI, посмотрите XCode, и Раскадровки Могут Создать, Сконфигурировать, и Загрузка Ваше Окно).

Можно использовать любой контроллер представления, который Вы хотите для корневого контроллера представления окна. В зависимости от Вашего дизайна интерфейса корневой контроллер представления может быть обобщением UIViewController возразите, что действия как контейнер для одного или более представлений, стандартного контроллера представления UIKit или пользовательского контроллера представления, который Вы определяете. Некоторые стандартные объекты UIKit, обычно используемые в качестве корневых контроллеров представления, включают навигацию, панель вкладок, и разделяют контроллеры представления.

При установке корневого контроллера представления окно добавляет корневое представление контроллера представления к окну и измеряет его соответственно. Окно использует несколько факторов для определения корректного размера для представления — такого как видимость строки состояния, текущей ориентации устройства, и должно ли представление быть выведенным на экран полным экраном.

Ключевое окно получает определенные события

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

Большую часть времени окно приложения становится ключевым окном. Поскольку iOS использует отдельные окна, чтобы вывести на экран предупредительные представления и ввести представления аксессуара, эти окна могут также стать ключевыми. Например, когда представление аксессуара предупредительного или ввода имеет текстовое поле, в котором пользователь в настоящее время вводит, окно, содержащее входное представление, является ключевым.

Большая часть Windows Exist приложения на том же уровне

Когда Вы создаете окно для своего приложения, UIWindow класс автоматически присваивает его тому, что вызвало нормальный уровень окна, который является надлежащим уровнем для использования для окон, представляющих связанное с приложением содержание. Этот уровень, установленный windowLevel свойство, описывает, где окно находится на оси z относительно других окон. Несмотря на то, что можно реконфигурировать связанное с приложением окно, которое будет выведено на экран на некотором другом уровне, Вы не должны должны быть.

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

Окно связано с одним дисплеем устройства

UIWindow класс screen свойство представляет определенный дисплей устройства, на котором в настоящее время выводится на экран окно. Это свойство содержит объект на экране — т.е. экземпляр UIScreen— это содержит информацию о дисплее устройства, таком как его границы, режим и яркость.

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

Справка уведомлений окна Вы наблюдаете изменения

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

В дополнение к уведомлениям, указывающим, когда клавиатура видима (такой как UIKeyboardDidShowNotification), UIWindow определяет следующие уведомления:

  • UIWindowDidBecomeVisibleNotification

  • UIWindowDidBecomeHiddenNotification

  • UIWindowDidBecomeKeyNotification

  • UIWindowDidResignKeyNotification

UIWindow уведомления поставлены в ответ на программируемые изменения в окнах Вашего приложения. Например, когда Ваше приложение показывает или скрывает окно, UIWindowDidBecomeVisibleNotification и UIWindowDidBecomeHiddenNotification уведомления поставлены соответственно. Обратите внимание на то, что эти уведомления не поставлены когда Ваши переходы приложения к фону: Даже при том, что окно не выведено на экран на экране, в то время как Ваше приложение в фоновом режиме, это все еще считают видимым в контексте Вашего приложения.

Большинство приложений не должно обращать внимание на UIWindowDidBecomeVisibleNotification и UIWindowDidBecomeHiddenNotification уведомления, потому что редко для приложения иметь больше чем одно окно.

UIWindowDidBecomeKeyNotification и UIWindowDidResignKeyNotification уведомления помогают Вам отслеживать то, когда окно Вашего приложения является ключевым. Когда окно является ключевым при отображении входного представления аксессуара для получения ввода данных пользователем, Вы, возможно, должны были бы знать.

Windows и экранная поддержка несколько других задач

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

  • Используйте объект окна для преобразования точек и прямоугольников к или от системы локальной координаты окна. Например, если у Вас есть значение в координатах окна, Вы могли бы хотеть преобразовать его в систему координат определенного представления прежде, чем попытаться использовать его. Для получения информации о том, как преобразовать координаты, посмотрите Координаты Преобразования в Иерархии Представления.

  • Используйте уведомления окна для отслеживания связанных с окном изменений. Windows генерирует уведомления, когда они показаны или скрыты или когда они принимают или оставляют ключевое состояние. Можно использовать эти уведомления для выполнения действий в других частях приложения. Для получения дополнительной информации посмотрите Справку Уведомлений Окна, Вы Наблюдаете Изменения.

Точно так же существует только несколько причин, Вы могли бы хотеть получить доступ к объекту на экране. Одна причина состоит в том, чтобы скорректировать яркость дисплея устройства хоста. Например, можно использовать brightness свойство для предоставления пользователям возможности установить яркость дисплея их основанного на iOS устройства. Можно также использовать wantsSoftwareDimming свойство, чтобы указать, что для Вашего приложения нужен уровень полумрака, который ниже, чем минимальная яркость устройства. (Обратите внимание на то, что включение wantsSoftwareDimming может иметь импликации производительности, потому что полумрак реализован в программном обеспечении.)

Наконец, Вы могли бы хотеть использовать UIScreen displayLinkWithTarget:selector: метод для создания Базовой Анимации выводит на экран объект ссылки, синхронизирующий получение с частотой обновления дисплея. Для узнавания больше об использовании объекта ссылки дисплея для установки цикла анимации посмотрите, что Рендеринг Использует Цикл Анимации. Обратите внимание на то, что можно использовать APIs GLKit для установки ссылки дисплея автоматически. Для узнавания больше о платформе GLKit см. Ссылку Платформы GLKit.

XCode и раскадровки могут создать, сконфигурировать и загрузить Ваше окно

Когда Вы базируете новый проект приложения для iOS на одном из шаблонов XCode и используете раскадровки для разработки пользовательского интерфейса, Вы не должны явно создать, сконфигурировать или загрузить окно своего приложения.

Когда Вы создаете основной файл раскадровки для своего приложения — и идентифицируете его как основную раскадровку в Вашем информационном файле списка свойств — iOS выполняет несколько задач установки для Вас. В частности, во время запуска iOS:

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

Как можно больше, необходимо использовать раскадровки для указания пользовательского интерфейса приложения (раскадровки не поддерживаются на версиях iOS до 5,0). Если Вы принимаете решение использовать файлы пера вместо раскадровок для создания UI приложения, Вы, вероятно, все еще не должны создавать объект окна, потому что большинство шаблонов XCode создает один для Вас. (При перетаскивании объекта окна в Интерфейсный файл Разработчика убедиться установить его Полный экран в атрибуте Запуска, чтобы гарантировать, что окно измерено должным образом для целевого устройства.)

При использовании файлов пера — вместо раскадровок — для создания UI приложения, необходимо гарантировать, что основное содержание файла пера установлено в окно во время запуска. Для установки основного содержания файла пера в окно, можно добавить к Вашему application:willFinishLaunchingWithOptions: метод некоторый код, такой как следующее:

window.rootViewController = myViewController;

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

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   myViewController = [[MyViewController alloc] init];
   window.rootViewController = myViewController;
   [window makeKeyAndVisible];
   return YES;
}