Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 Hello iPhone
2 Grundlagen
3 Views und Viewcontroller
4 Alles unter Kontrolle
5 Daten, Tabellen und Controller
6 Models, Layer, Animationen
7 Programmieren, aber sicher
8 Datenserialisierung und Internetzugriff
9 Jahrmarkt der Nützlichkeiten
A Sicherer Entwicklungszyklus
Stichwort

Download:
- ZIP, ca. 49,9 MB
Buch bestellen
Ihre Meinung?

Spacer
Apps programmieren für iPhone und iPad von Klaus M. Rodewig, Clemens Wagner
Das umfassende Handbuch
Buch: Apps programmieren für iPhone und iPad

Apps programmieren für iPhone und iPad
Galileo Computing
1000 S., geb., mit DVD
39,90 Euro, ISBN 978-3-8362-1915-0
Pfeil 4 Alles unter Kontrolle
Pfeil 4.1 Viewcontroller, XIBs und Storyboards
Pfeil 4.1.1 Erstellung von Viewcontrollern über XIB-Dateien
Pfeil 4.1.2 Applikationsinitialisierung
Pfeil 4.1.3 Storyboards
Pfeil 4.1.4 Modale Dialoge
Pfeil 4.1.5 Pop-over
Pfeil 4.1.6 Übergänge
Pfeil 4.2 Der Navigationcontroller
Pfeil 4.2.1 Viewcontroller anzeigen und entfernen
Pfeil 4.2.2 Die Navigationsleiste
Pfeil 4.2.3 Der Zurückbutton
Pfeil 4.2.4 Gehe drei Felder zurück
Pfeil 4.2.5 Die Werkzeugleiste
Pfeil 4.2.6 Navigations- und Werkzeugleisten gestalten
Pfeil 4.3 Navigation- und Pop-over-Controller in der Praxis
Pfeil 4.3.1 Navigationcontroller anlegen
Pfeil 4.3.2 Einen Dialog für die Einstellungen gestalten
Pfeil 4.3.3 Einstellungen dauerhaft speichern
Pfeil 4.3.4 Anpassung an das iPad
Pfeil 4.4 Der Splitviewcontroller
Pfeil 4.4.1 Das Splitviewcontroller-Delegate
Pfeil 4.4.2 Ein praktisches Beispiel
Pfeil 4.4.3 Anpassung des Rotationsverhaltens
Pfeil 4.5 Der Tabbarcontroller
Pfeil 4.5.1 Aufbau einer Reiternavigation
Pfeil 4.5.2 Plaketten
Pfeil 4.5.3 Für ein paar Controller mehr
Pfeil 4.5.4 Der Tabbarcontroller im Storyboard
Pfeil 4.5.5 Die Gestaltungsmöglichkeiten für die Tabbar unter iOS 5
Pfeil 4.6 Der Pageviewcontroller
Pfeil 4.6.1 Einen Pageviewcontroller erzeugen
Pfeil 4.6.2 Die Datenquelle und das Delegate
Pfeil 4.7 Eigene Container- und Subviewcontroller
Pfeil 4.7.1 Container- und Subviewcontroller
Pfeil 4.7.2 Eigene Subviewcontroller
Pfeil 4.7.3 Eigene Delegate-Protokolle erstellen
Pfeil 4.7.4 Delegate-Protokolle erweitern
Pfeil 4.8 Regelbasierte Anpassung der Oberfläche
Pfeil 4.8.1 Gestaltungsregeln ...
Pfeil 4.8.2 ... und Gestaltungsmöglichkeiten

Galileo Computing - Zum Seitenanfang

4.6 Der PageviewcontrollerZur nächsten Überschrift

Eine weitere Möglichkeit, zwischen den Viewcontrollern einer App zu navigieren, ist eine Wischnavigation, bei der Sie auf dem Bildschirm nach rechts oder links streichen, um zur vorherigen oder nächsten Seite zu gelangen. Apple hat in iOS 5 mit der Klasse UIPageViewController einen weiteren Containerviewcontroller eingeführt, der das Blättern zwischen beliebig vielen Viewcontrollern erlaubt. Er animiert dabei den Wechsel durch eine Pagecurl-Animation, die das Umschlagen einer Buchseite (horizontales Blättern) oder eines Kalenderblattes (vertikales Blättern) nachahmt. Seit iOS 6 gibt es außerdem noch eine Scroll-Animation. Sie können eine von drei möglichen Blätterachsen wählen:

  • UIPageViewControllerSpineLocationMin: der linke oder obere Rand des Views
  • UIPageViewControllerSpineLocationMid: die horizontale oder vertikale Mittelachse des Views
  • UIPageViewControllerSpineLocationMax: der rechte oder untere Rand des Views

Ein- und doppelseitige Darstellung

Die doppelseitige Darstellung des Pageviewcontrollers eignet sich in der Regel nur im Querformat beim horizontalen Blättern oder im Hochformat beim vertikalen Blättern. Über die Delegate-Methode pageViewController:spineLocationForInterfaceOrientation: können Sie die Bezugsposition für das Blättern bei einer Viewrotation ändern.

Abbildung

Abbildung 4.40 Pageviewcontroller mit zweiseitiger Darstellung

Wenn der Pageviewcontroller eine Mittelachse als Bezug verwendet, stellt er immer zwei Viewcontroller gleichzeitig dar, ansonsten nur einen. In diesem Fall können Sie eine doppelseitige Darstellung über die Property doubleSided wählen. Dann verwendet der Pageviewcontroller jeden zweiten Controller zur Darstellung der Rückseite seines Vorgängers (siehe Abbildung 4.40).

Bei der einseitigen Darstellung verwendet der Pageviewcontroller hingegen ein stark aufgehelltes, gespiegeltes Abbild der ungeraden Seiten für die Rückseiten.

Die andere Seite der Medaille

Verwenden Sie die doppelseitige Darstellung nur mit der Curl-Animation; sie macht nicht nur bei der Scroll-Animation keinen Sinn, sondern kann sogar zu Abstürzen führen.


Galileo Computing - Zum Seitenanfang

4.6.1 Einen Pageviewcontroller erzeugenZur nächsten ÜberschriftZur vorigen Überschrift

Sie können einen Pageviewcontroller sowohl über Programmanweisungen als auch über NIBs beziehungsweise Storyboards anlegen. Falls Sie den letztgenannten Weg wählen, müssen Sie dem Pageviewcontroller indes nach der Erzeugung seine Subviewcontroller per Programmcode zuweisen. In einem Storyboard ist außerdem die Zuweisung des Delegates und einer Datenquelle notwendig, da Sie das nicht über den Interface Builder machen können. Dabei ist die Datenquelle eine Controllerkomponente, die dem Pageviewcontroller die Subviewcontroller für die Anzeige zur Verfügung stellt.

Datenquellen

Eine Datenquelle ist eine Controllerkomponente, die Objekte für einen anderen Controller bereitstellt. Dabei fragt der Controller die Datenquelle immer nur nach den Daten, die er aktuell benötigt, und er überlässt die Verwaltung der Daten komplett der Datenquelle. Dieses Vorgehen hat den Vorteil, dass die Applikation nicht die kompletten Daten im Hauptspeicher halten muss. Der Controller kann also riesige Datenmengen bei verhältnismäßig geringem Speicherverbrauch anzeigen.

Bei der Konstruktion eines Pageviewcontrollers legen Sie die Richtung und die Animation des Blätterns fest. Diese Werte können Sie später nicht mehr ändern. Als Animationstyp steht bis iOS 5 nur UIPageViewControllerTransitionStylePageCurl zur Verfügung, der ein Umblättern der Seiten simuliert. Ab iOS 6 gibt es außerdem noch den Typ UIPageViewControllerTransitionStyleScroll, der die Seiten von den Rändern her hereinschiebt.

Projektinformation

Den Quellcode des nachfolgenden Beispielprojekts finden Sie auf der DVD unter Code/Apps/Page oder im Github-Repository zum Buch im Unterverzeichnis https://github.com/Cocoaneheads/iPhone/tree/Auflage_2/Apps/Page.

Mit dem Beispielprojekt Page, das Sie auf der beiliegenden DVD finden, können Sie die verschiedenen Einstellungen eines Pageviewcontrollers ausprobieren. Es erzeugt den Controller über den in Listing 4.46 dargestellten Code.

UIPageViewControllerNavigationOrientation theOrientation = Zeilenumbruch
self.selectedNavigationOrientation;
UIPageViewControllerSpineLocation theLocation = Zeilenumbruch
self.selectedSpineLocation;
BOOL isDoubleSided = Zeilenumbruch
self.doubleSidedControl.selectedSegmentIndex;
NSDictionary *theOptions =
[NSDictionary dictionaryWithObjectsAndKeys:Zeilenumbruch
[NSNumber numberWithInt:theLocation], Zeilenumbruch
UIPageViewControllerOptionSpineLocationKey, nil];
UIPageViewController *theController = Zeilenumbruch
[[UIPageViewController alloc] initWithTransitionStyle: Zeilenumbruch
self.animationControl.selectedSegmentIndex Zeilenumbruch
navigationOrientation:theOrientation Zeilenumbruch
options:theOptions];
NSArray *theControllers = Zeilenumbruch
[self viewControllersForSpineLocation:theLocation];

theController.doubleSided = isDoubleSided || Zeilenumbruch
theLocation == UIPageViewControllerSpineLocationMid;
theController.dataSource = self;
theController.delegate = self;
[theController setViewControllers:theControllers Zeilenumbruch
direction:self.selectedDirection animated:YES Zeilenumbruch
completion:NULL];

Listing 4.46 Erzeugen eines Pageviewcontrollers

Die Bezugsposition für das Blättern übergeben Sie in einem Dictionary unter dem Schlüssel UIPageViewControllerOptionSpineLocationKey. Allerdings dürfen Sie bei der mittleren Blätterposition nur die doppelseitige Darstellung angeben. Außerdem müssen Sie die Viewcontroller setzen, die der Pageviewcontroller nach seinem Erscheinen anzeigen soll. Auch hier ist die mittlere Blätterposition ein Sonderfall, da das Array hier zwei Viewcontroller enthalten muss. Für die anderen Positionen darf das Array hingegen immer nur ein Element enthalten. Die Werte für diese Konfigurationsoptionen fasst Tabelle 4.5 noch einmal zusammen.

Tabelle 4.5 Konfigurationsoptionen des Pageviewcontrollers

Blätterposition Rückseitendarstellung Anzahl Viewcontroller

Minimal

Ein- und doppelseitig

1

Mitte

Doppelseitig

2

Maximal

Ein- und doppelseitig

1

Listing 4.46 verwendet eine Hilfsmethode, um die Viewcontroller für die Konstruktion zu erzeugen. Die Methode viewControllersForSpineLocation: liefert ein Array mit so vielen Viewcontrollern zurück, wie in Tabelle 4.5 angegeben sind. Dieses Array übergeben Sie über die Methode setViewControllers:direction:animated:completion: an den Pageviewcontroller. Dabei sind die weiteren Parameter nur für bereits angezeigte Controller relevant. Über den Parameter animated legen Sie fest, dass die neuen Seiten durch ein Umblättern erscheinen. Die Richtung des Blätterns können Sie über den Parameter direction festlegen. Der letzte Parameter kann eine Blockfunktion enthalten, die der Controller nach Beendigung der Animation aufruft.


Galileo Computing - Zum Seitenanfang

4.6.2 Die Datenquelle und das DelegateZur vorigen Überschrift

Für das Blättern müssen Sie dem Pageviewcontroller jeweils die benötigten Viewcontroller für die Seiten über eine Datenquelle mit dem Protokoll UIPageViewControllerDataSource bereitstellen. Es deklariert die zwei notwendigen Methoden pageViewController:viewControllerBeforeViewController: und pageViewController:viewControllerAfterViewController:, mit denen der Pageviewcontroller jeweils auf die Vorgänger beziehungsweise Nachfolger eines Viewcontrollers zugreifen kann. Das Beispielprogramm verwendet für die Seiten einfach Viewcontroller, die eine Seitenzahl anzeigen. Die Methoden der Datenquelle erzeugen jeweils einen neuen Viewcontroller, bei dem die Seitennummer um eins niedriger beziehungsweise höher ist. Listing 4.47 enthält die Methode der Datenquelle zur Bestimmung des Vorgängers. Die Implementierung für die Bestimmung der Nachfolger ist dabei bis auf die vorletzte Zeile (+ anstatt ) gleich.

- (UIViewController *)pageViewController:
(UIPageViewController *)inPageViewController
viewControllerBeforeViewController:
(UIViewController *)inViewController {
LabelViewController *theController =
(LabelViewController *)inViewController;
return [self labelViewControllerWithPageNumber:
theController.pageNumber – 1];
}

Listing 4.47 Erzeugung des Vorgängers in der Datenquelle

Da das Projekt ein Storyboard verwendet, sollten Sie neue Viewcontroller auch darüber erzeugen. Dabei gelangen Sie an das Storyboard über die Property storyboard des Viewcontrollers. Es hat die Methode instantiateViewControllerWithIdentifier:, mit der Sie einen neuen Viewcontroller zu der angegebenen Kennung anlegen können, die Sie über das Feld Identity im Identitätsinspektor des Controllers im Interface Builder festlegen.

- (id)labelViewControllerWithPageNumber:(NSInteger)inPage {
LabelViewController *theController = [self.storyboard Zeilenumbruch
instantiateViewControllerWithIdentifier:@"label"];
theController.pageNumber = inPage;
return theController;
}

Listing 4.48 Erzeugung eines Viewcontrollers aus dem Storyboard

Der Pageviewcontroller kann bei einer Viewrotation die Blätterposition über die Delegate-Methode pageViewController:spineLocationForInterfaceOrientation: des Protokolls UIPageViewControllerDelegate ändern (siehe Listing 4.49):

- (UIPageViewControllerSpineLocation)pageViewController:Zeilenumbruch
(UIPageViewController *)inPageViewControllerZeilenumbruch
spineLocationForInterfaceOrientation:Zeilenumbruch
(UIInterfaceOrientation)inOrientation {
UIPageViewControllerNavigationOrientation theOrientation = Zeilenumbruch
inPageViewController.navigationOrientation;
UIPageViewControllerSpineLocation theLocation = Zeilenumbruch
[self spineLocationForInterfaceOrientation:Zeilenumbruch
inOrientation Zeilenumbruch
navigationOrientation:theOrientation];
NSArray *theControllers = Zeilenumbruch
[self viewControllersForSpineLocation:theLocation];
[inPageViewController setViewControllers:theControllers Zeilenumbruch
direction:self.selectedDirection Zeilenumbruch
animated:YES completion:NULL];
return theLocation;
}

Listing 4.49 Berechnung der Blätterposition für die Viewrotation

Diese Methode liefert jedoch nicht nur die neue Blätterposition zurück. Sie muss zusätzlich dafür sorgen, dass der Pageviewcontroller die richtige Anzahl an Viewcontrollern enthält.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.







<< zurück
  Zum Katalog
Zum Katalog: Apps programmieren für iPhone und iPad

Apps programmieren für iPhone und iPad
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Einstieg in Objective-C 2.0 und Cocoa





 Einstieg in
 Objective-C 2.0
 und Cocoa


Zum Katalog: Apps entwickeln für iPhone und iPad - Videotraining






 Apps entwickeln für
 iPhone und iPad -
 Videotraining


Zum Katalog: Apps mit HTML5 und CSS3






 Apps mit HTML5
 und CSS3


Zum Katalog: iPhone- und iPad-Apps entwickeln






 iPhone- und
 iPad-Apps entwickeln


Zum Katalog: Android 4






 Android 4


Zum Katalog: Android-Apps entwickeln - Videotraining






 Android-Apps
 entwickeln -
 Videotraining


Zum Katalog: Windows Store Apps mit XAML und C#






 Windows Store Apps
 mit XAML und C#


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2013
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de