почему UIWindow является дочерним и родительским по отношению к UView?

StackOverflow https://stackoverflow.com/questions/830785

Вопрос

В справочнике UIKit говорится, что UIView является суперклассом UIWindow, но, несмотря на это происхождение, UIWindow фактически управляет UIViews.Для меня это звучит так необычно.

Кто-нибудь знает, как это важно с точки зрения разработки программного обеспечения?

Большое спасибо.

РЕДАКТИРОВАТЬ:
Я прочитал соответствующий параграф в руководстве по программированию iPhone.Но я не мог понять, почему они делают обратное:пусть UIWindow будет родительским элементом UIView.Должно быть, что-то заставило Apple спроектировать иерархию классов таким образом.

Это было полезно?

Решение

от http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/WindowsandViews/WindowsandViews.html

Одна вещь, которая может показаться необычной опытным разработчикам Mac OS X в классе UIWindow, — это его наследование.В Mac OS X родительским классом NSWindow является NSResponder.В ОС iPhone родительским классом UIWindow является UIView.Таким образом, в iPhone OS окно также является объектом просмотра.Несмотря на свое происхождение, вы обычно относитесь к окнам в iPhone OS так же, как и в Mac OS X.То есть вы обычно не манипулируете свойствами объекта UIWindow, связанными с представлением, напрямую.

РЕДАКТИРОВАТЬ:

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

Я знаю, что это немного расплывчато, и я думаю, что только Apple знает точную причину такой иерархии.

http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIWindow_Class/UIWindowClassReference/UIWindowClassReference.html#//apple_ref/occ/cl/UIWindow

Класс UIWindow определяет объекты (известные как windows), которые управляют и координируют окна, отображаемые приложением на экране.Двумя основными функциями окна являются предоставление области для отображения его представлений и распределение событий по представлениям.

иhttp://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/cl/UIView

Класс UIView предоставляет общие методы, которые вы используете для создания всех типов представлений и доступа к их свойствам.Например, если у подкласса нет собственного назначенного инициализатора, вы используете initWithFrame:метод создания представления.Свойство кадра определяет начало координат и размер представления в координатах суперпредставления.Начало системы координат для всех видов находится в верхнем левом углу.

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

Другие советы

Потому что тогда каждый UIView будет иметь (унаследованные) свойства и поведение, которые имеют смысл только для окон.Это просто неправильно.

Обратное имеет больше смысла:окно добавляет поведение поверх представлений.Таким образом, он может рисовать, иметь границы, содержать другие представления и т. д.Но он расширяет это, например, зная, как выполнять рендеринг на дисплее.

В MacOS X NSWindows не являются представлениями.Они содержат «корневое представление», называемое contentView.Окна iOS представляют собой композицию NSWindow + его корневое представление.

Каждый обычный UIView, включая корневое представление главного окна, должен иметь родительское представление.UIWindow наследует UIView для выполнения обязанностей родительского представления в иерархии представлений.UIWindow не является обычным представлением и имеет собственные реализации методов из интерфейса UIView.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top