Frage

Ich habe das Lernen verbracht Zeit wie das iPhone SDK zu verwenden. Ich habe gelesen, „ Beginning iPhone Entwicklung: Exploring the iPhone SDK “von Anfang bis Ende und ich habe noch nie ein Beispiel für mehrere Ansichten innerhalb eines XIB gesehen.

Zur Veranschaulichung, was ich meine, hier ist ein Screenshot einer XIB mit der einfachen Konfiguration von dem, was ich bin auf:

alt text http: // theopensourceu. com / wp-content / uploads / 2009/04 / one-xib-multiple-views.png

Ich vermute, dass es einen ganz bestimmten Grund sein muss, die ich nie gesehen habe. In Apples Beispielen und in allen meinen Lesungen so weit sind mehrere XIBs mit nur einem einzigen ‚view‘ verwendet (und manchmal auch der Navigation Controller oder ein Tab Bar-Controller, etc.). Was ist der Grund dafür? Sollte ich mehrere Ansichten in einem XIB vermeiden? Was sind die Vorteile oder Nachteile zu beiden Verfahren?

Vielen Dank im Voraus

War es hilfreich?

Lösung

Es ist eine Frage der Speicheroptimierung und Ladezeiten. Wenn Sie alle Ihre Ansichten in einer XIB setzen, dann, wenn die Anwendung startet, es den gesamten XIB in den Speicher geladen hat und alle Objekte für alle Steuerelemente konstruieren, und das dauert eine nicht-triviale Menge an Zeit.

Wenn Sie stattdessen Ihre Ansichten in separate XIBs trennen, dann wird die App viel schneller starten, da nur die XIB die Startansicht enthält, geladen wird, und es wird auch verwenden weniger Speicher auf den ersten. Dann, wenn die Ansicht ändert, können Sie die XIB laden lazily die neue Ansicht enthält. Dies wird eine kleinere hitch entstehen, wenn eine Ansicht zum ersten Mal öffnen. Wenn Sie wirklich versuchen, die Speichernutzung zu optimieren, können Sie auch die vorherige Ansicht entladen, wenn die Ansicht wechseln, aber ich würde nicht empfehlen, da dies einen Haken jedes Mal, wenn Sie Ansichten wechseln entstehen werden, statt nur das erste Mal wechseln Sie in einer bestimmten Ansicht.

Andere Tipps

auf der vorherige Antwort Nach oben gibt es einige Male, wenn Sie mehrere Ansichten gleichzeitig laden möchten. Hier ein Beispiel: Sie einen Bericht mit mehreren Seiten angezeigt wird und Sie gehen einen UIScrollView verwenden, um sie zu verwalten. Wenn der Benutzer den Bericht getan surft, wird er den Bericht schließen, die die Ansicht entlassen werden.

Erstellen Sie eine UIScrollView in einem XIB zusammen mit einem UIView für jede Seite, die Sie benötigen. Da die UIViews Teil des XIB sind, werden sie in den Speicher zusammen geladen werden, alle auf einmal, wenn der Bericht geöffnet wird. Erstellen Sie zwei UIViewControllers und nutzen sie, um die Seite anzuzeigen betrachtet wird und die eine wird gescrollt. Wenn der Benutzer durch die Seiten bewegt, die UIViewController auf der Seite wiederverwenden aus wird gescrollt entfernt die Seite zu halten, wird gescrollt.

Dies wird große Leistung gewährleisten, während der Benutzer durch die Seiten wird Spiegeln. Er lädt alle Seiten auf einmal vorne in den Speicher. Ich verwendet nur zwei UIViewControllers, und es ändert sich nur, welche Ansichten in ihnen sind und verschiebt sie um.

Dies hat auch den großen Vorteil, alle Seiten in einem XIB mit. Es macht es einfacher zu bearbeiten und schneller zu laden als getrennten XIB ist. Sie müssen nur sicherstellen, dass Sie den Speicher haben auf einmal alle Seiten zu laden. Wenn es statische Inhalte (wie in meinem Fall) ist es ein guter Weg zu gehen.

Wenn Sie suchen ein gutes Beispiel dafür, wie dies zu tun, fand ich diese Ressource ein ausgezeichneter Ausgangspunkt zu sein:

http://cocoawithlove.com/2009/01 /multiple-virtual-pages-in-uiscrollview.html

Dies ist eine Warnung an jeden, der versucht mit zwei Ansichten in einem einzigen XIB (iOS 4 mit Xcode 4) Landschaft und Porträt zu implementieren. Der Hauptnachteil mit zwei Ansichten in einem einzigen XIB-für mich, war, dass man nur ein einziges UIOutlet Objekt in einem XIB zu einem einzigen UIOutlet Objekt in einem View-Controller anschließen.

So zum Beispiel, wenn Sie eine XIB mit Blick für Landschaft und Blick für die Portrait- und beide Ansichten der gleichen Interface-Objekte in verschiedenen Positionen (wie ein UILabel in Landschaft und ein UILabel in Hochformat) enthalten. Es ist nicht möglich, die UILabel in Ihrer Portraitansicht und das UILabel Objekt in der Landschaftsansicht zu einem einzigen UILabel Objekt im View-Controller zur gleichen Zeit zu verbinden .

Das finde ich eine Enttäuschung, da die iOS UIViewController Dokumentation (iOS 4.3) schlug vor, dass ich durch Umschalten zwischen zwei Ansichten programmatisch als Bildschirm dreht benutzerdefiniertes Quer- und Hochformat implementieren könnte.

Nachdem er einige Zeit, um herauszufinden, wie dies zu tun, entdecken ich, dass es möglich ist, zwei zu einer einzigen Ansicht Controller angeschlossen unterschiedliche Ansichten zu haben, aber Sie müssen Auslässen für beiden Ansichten haben. Zum Beispiel in meinen Ansicht-Controller, habe ich zwei UILabel Objekte (ein zu einer UILabel in der Portraitansicht zu verbinden; man zu einem UILabel in der Landschaftsansicht verbinden). In meinem Code, jedes Mal wenn ich die Landschaft Ausgang aktualisieren, habe ich auch das Porträt Landschaft aktualisieren.

Nicht sehr elegant, aber es funktioniert, und wie dies für eine einfache Ansicht mit einem Bildschirm ist, wird es nicht zu viel Speicher aufbrauchen, um alle UI-Objekte in der Steuerung und Ansichten dupliziert haben müssen. Ich würde nicht ein Projekt erstellen, das es wieder so tat, aber es war gut genug Behelfslösung für dieses Projekt.

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