Der einfachste Weg, um mehrere Orientierungen zu unterstützen? Wie lade ich eine benutzerdefinierte NIB, wenn sich die Anwendung in Querformat befindet?
Ich habe eine Anwendung in die ich unterstützen möchte mehrere Ausrichtungen. Ich habe zwei .xib-Dateien, die ich verwenden möchte, myViewController.xib und myViewControllerLandscape.xib. myViewController.xib
besteht in der Projekt - /Ressourcen-und myViewControllerLandscape.xib
existiert im root-Verzeichnis der Projekte.
Was ich will zu tun ist, verwenden Sie eine separate Feder (myViewControllerLandscape.xib)
für meine Drehungen. Ich versuche die Erkennung von Drehung in viewDidLoad l
ike:
if((self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight))
{
NSLog(@"Landscape detected!");
[self initWithNibName:@"myViewControllerLandscape" bundle:nil];
}
Aber ich kann sehen, dass in der gdb ist, dass dieses nicht ausgeführt, wenn die app gestartet wird, ist das Gerät in der Landschaft. Die NSLog-Nachricht nicht ausgelöst. Warum ist das so? Was habe ich falsch gemacht?
Auch, wenn ich explizit setzen die initWithNibName
Funktionsaufruf in der viewDidLoad
Methode, die Feder wird nicht geladen, und weiter geht es mit der myViewController.xib - Datei. Was ist falsch an meinem Aufruf? Sollte ich angeben, ein Bündel?
Dank!
InformationsquelleAutor der Frage Peter Hajas | 2010-03-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lädst du anzeigen, dann überprüfen Sie die Ausrichtung und laden eine andere, wenn nötig. Überprüfen Sie die Ausrichtung in
shouldAutorotateToInterfaceOrientation:
Rückkehr ja, wenn Sie drehen möchten.Ich mit einem Navigations-controller, um den übergang. Wenn ich die portrait-Ansicht und das Gerät dreht, Schiebe ich die Ansicht im Querformat und dann die pop-landscape Ansicht, wenn Sie zurück zu portrait.
Edit:
Die Orientierung Konstanten sind nicht globals Abfrage, sondern Teil der Nachrichten der Steuerung durch das system. Als solche können Sie leicht erkennen, Orientierung, bevor Sie eine view-controller lädt. Stattdessen führen Sie die festverdrahtung der app zu starten, die in einer bestimmten Orientierung (in der Regel im hochformat), und dann sofort drehen. (Siehe mobile Safari. Es beginnt immer in der portrait-und dreht sich dann zu Querformat).
Diese sind die zwei Methoden, die ich verwendet, um die swap-meinen hoch-und Querformat.
Alle drei view-Controller haben diese Methode:
Das portrait ist dieses:
Jeder Landschaft controller hat:
Die app startet im hochformat. Wenn die Ausrichtung des Geräts ist die Landschaft, drückt es den entsprechenden Landschaften. Wenn sich das Gerät dreht wieder auf hochformat, erscheint die Landschaft. Für den Benutzer sieht es wie die gleiche Ansicht reorganisieren sich für eine andere Ausrichtung.
InformationsquelleAutor der Antwort TechZen
Fand ich eine viel bessere Weise funktioniert unabhängig von der nav-controller. Jetzt habe ich diese zu arbeiten, wenn eingebettet in ein nav-controller, und wenn Sie NICHT eingebettet ist (obwohl ich bin nicht mit dem nav-controller gerade jetzt, so kann es einige Fehler, den ich nicht gesehen hab, z.B. die PUSH-transition animation könnte gehen, komisch, oder so)
Zwei Federn, mit der Apple-Namenskonvention. Ich vermute, dass in iOS 6 oder 7, Apple könnte hinzufügen, diese als ein "feature". Ich verwende es in meiner apps und es funktioniert perfekt:
self.view
- dadurch wird die Anzeige AUTOMATISCH zu aktualisierenviewDidLoad
(Apple NICHT nennen, das für Sie, wenn Sie manuell neu laden ein NIB)InformationsquelleAutor der Antwort Adam
Wirklich, wie Adam die Antwort - ich veränderte es etwas zu ermöglichen Initiale laden der nib-entweder im portrait-oder landscape -
InformationsquelleAutor der Antwort amergin
Ich mag TechZen die akzeptierte Antwort, aber wie schon in Adam ' s Kommentar es bleibt die portrait-view-controller in der navigation stack, wenn Sie sich drehen, um die Landschaft. Dies bedeutet Antippen der zurück-Schaltfläche in der Navigationsleiste, während in der Landschaft wird der Benutzer auf die portrait-Ansicht. Ein Mitarbeiter und ich versuchen, den Ansatz der manuelle entfernen des zusätzlichen Elements aus der nav-stack. Es scheint zu funktionieren, aber ich habe sehr wenig Erfahrung mit es noch, also ich mache keine Versprechungen. Hier ist Beispielcode:
Gehen von portrait zu landscape:
Zurück zu portrait:
Wenn Sie nicht animiert:NEIN, Sie können Holen Sie Warnungen über den Zustand der navigation.
Helfer:
InformationsquelleAutor der Antwort David Gelbart
Eine weitere Wahl, TPMultiLayoutViewController.
InformationsquelleAutor der Antwort ohho