Frage

Die UIKIT -Referenz besagt, dass UIView eine Superklasse von UIWindow ist, aber trotz dieser Abstammung verwaltet ein UIWindow tatsächlich UIViews. Das klingt für mich so ungewöhnlich.

Weiß jemand, was die Bedeutung davon in Bezug auf das Softwaredesign sind?

Danke vielmals.

BEARBEITEN:
Ich habe den zugehörigen Absatz im iPhone -Programmierhandbuch gelesen. Trotzdem konnte ich nicht sehen, warum sie umgekehrt sind: Lassen Sie UIWindow der Elternteil von Uiview sein. Es muss etwas gegeben haben, das Apple gezwungen hat, die Klassenhierarchie auf diese Weise zu entwerfen.

War es hilfreich?

Lösung

aus http://developer.apple.com/iphone/library/documentation/iphone/conceptual/iphoneoprogrammingguide/windowsandviews/windowsandviews.html

Eine Sache, die erfahrene Mac OS X -Entwickler in der UIWindow -Klasse ungewöhnlich finden, ist das Erbe. In Mac OS X ist die übergeordnete Klasse von Nswindow NSResponder. Im iPhone -Betriebssystem ist die übergeordnete Klasse von UIWindow UIView. Somit ist im iPhone -Betriebssystem ein Fenster auch ein Ansichtsobjekt. Trotz seiner Abstammung behandeln Sie in der Regel Windows im iPhone-Betriebssystem wie in Mac OS X.

BEARBEITEN:

Das UIView ist etwas generisches (bietet gemeinsame Methoden, mit denen Sie alle Arten von Ansichten erstellen und auf ihre Eigenschaften zugreifen können).

Ich weiß, dass es ein wenig vage ist und ich denke, nur Apple würde den genauen Grund für diese Hierarchie kennen.

http://developer.apple.com/iphone/library/documentation/uikit/reference/uiwindow_class/uiwindowclassreference/uiwindowclassreference.html#//apple_ref/occ/cl/uiwindow

Die UIWindow -Klasse definiert Objekte (bezeichnet als Windows), die die Windows verwalten und koordinieren, die eine Anwendung auf dem Bildschirm anzeigt. Die beiden Hauptfunktionen eines Fensters bestehen darin, einen Bereich für die Anzeige seiner Ansichten und zum Verteilen von Ereignissen an die Ansichten bereitzustellen.

undhttp://developer.apple.com/iphone/library/documentation/uikit/reference/uiview_class/uiview/uiview.html#/apple_ref/occ/cl/uiview

Die UIView -Klasse bietet gemeinsame Methoden, mit denen Sie alle Arten von Ansichten erstellen und auf ihre Eigenschaften zugreifen können. Sofern eine Unterklasse beispielsweise einen eigenen festgelegten Initialisierer hat, verwenden Sie die InitWithFrame: Methode, um eine Ansicht zu erstellen. Die Frame -Eigenschaft gibt den Ursprung und die Größe einer Ansicht in Übersichtskoordinaten an. Der Ursprung des Koordinatensystems für alle Ansichten befindet sich in der oberen linken Ecke.

UIView -Objekte sind in einem UIWindow -Objekt in einer verschachtelten Hierarchie von Unteransichten angeordnet. Übergeordnete Objekte in der Ansichtshierarchie werden als Übersicht bezeichnet und Kinder werden als Unteransicht bezeichnet. Ein View -Objekt behauptet, dass eine rechteckige Region seiner umschließenden Übersicht für alle Zeichnen in dieser Region verantwortlich ist und auch für Ereignisse in dieser Bereitschaft erhalten kann. Geschwisteransichten können sich ohne Probleme überlappen, was eine komplexe Ansichtsplatzierung ermöglicht.

Andere Tipps

Denn dann hätte jede UIView (ererbte) Eigenschaften und jedes Verhalten, das nur für Windows sinnvoll ist. Das ist einfach falsch.

Der andere Weg ist sinnvoller: Ein Fenster verleiht dem Ansichten Verhalten. So kann es zeichnen, Grenzen haben, andere Ansichten enthalten usw., aber es erweitert dies mit, z. B. weiß, wie man die Anzeige rendert.

In MacOS X sind Nswindows keine Ansichten. Sie enthalten eine "Root -Ansicht", die als ContentView bezeichnet wird. iOS -Fenster sind eine Zusammensetzung von Nswindow + seiner Root -Ansicht.

Jede reguläre UIView einschließlich der Root -Ansicht des Hauptfensters sollte eine übergeordnete Ansicht haben. UIWindow erbt UIView, um Aufgaben einer übergeordneten Ansicht in einer Ansichtshierarchie auszuführen. UIWindow ist keine regelmäßige Ansicht und verfügt über eigene Implementierung von Methoden von der Benutzeroberfläche von UIView.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top