iPhone-App im Querformat, 2008-Systeme

stimmen
88

Hinweis: Diese Frage aus dem Jahr 2008 und jetzt ist nur historisches Interesse.


Was ist der beste Weg, eine iPhone-Anwendung zu erstellen, die von Anfang an im Landschaftsmodus läuft, unabhängig von der Position des Gerätes?

Sowohl programmatisch und mit dem Interface Builder.

Veröffentlicht am 02/08/2008 um 11:47
quelle vom benutzer
In anderen Sprachen...                            


8 antworten

stimmen
46

Historische Antwort nur. out Spektakulär von Datum:

Bitte beachten Sie, dass diese Antwort jetzt heraus ungeheuer aktuell ist.

Dieser Beitrag ist nur eine historische Kuriosität .


Spannende Nachrichten! Wie unten von Andrew entdeckt wird dieses Problem in Version 4.0 oder höher von Apple behoben.

Es scheint, es nicht mehr erforderlich ist, um die Größe der Ansicht auf jeder Ansicht zu zwingen, und das spezifische gravierende Problem der Landschaft „nur das erste Mal arbeiten“ behoben wurde.

Ab April 2011 ist es nicht möglich, etwas unter 4,0 zu testen oder sogar bauen, so dass die Frage rein historische Neugier ist. Es ist unglaublich, wie viel Mühe es Entwickler so lange verursacht!


Hier ist die ursprüngliche Diskussion und Lösung. Dies ist völlig irrelevant jetzt, da diese Systeme sind nicht einmal funktionsfähig.


Es ist äußerst schwierig, diese Arbeit voll zu machen - es gibt mindestens drei Probleme / Bugs im Spiel.

versuchen Sie dies .. Interface Builder Landschaftsgestaltung

Insbesondere ist zu beachten , dass , wo es heißt „und Sie müssen ShouldAutorotateToInterfaceOrientation richtig nutzen überall“ bedeutet überall, alle Vollbild - Ansichten.

Hoffe, dass es in diesem Alptraum hilft!

Eine wichtige Erinnerung an die ZUSATZ altbekanntes Problem bei der Hand hier: wenn Sie versuchen , zwischen tauschen MEHRERE Ansicht (alle Landschaft), ES TUT, nicht mehr funktionieren . Es ist wichtig , sich daran zu erinnern , oder Sie werden Tage auf das Problem verschwenden. Es ist buchstäblich NICHT MÖGLICH. Es ist der größte offene, bekannt, Fehler auf der iOS - Plattform. Es gibt buchstäblich keine Möglichkeit , die Hardware zu machen , die zweite Ansicht machen Sie laden, seine Landschaft. Die ärgerlich , aber einfache Abhilfe, und was Sie tun müssen, ist eine triviale Master UIViewController haben , die nichts tut , aber es sitzen und lassen Sie zwischen Ansichten wechseln.

Mit anderen Worten, in iOS wegen eines großen Know Fehler:

[window addSubview:happyThing.view];
[window makeKeyAndVisible];

Sie können das nur einmal tun . Wenn Sie später versuchen happyThing.view zu entfernen und stattdessen setzen dort newThing.view, funktioniert es nicht - und basta. Die Maschine drehtnie den Blick auf Landschaft. Es gibt keinen Trick fix, auchApple kann es nicht funktionieren. Die Abhilfe Sie annehmen müssen eine Gesamt UIViewController ist mitdie einfach da sitzt und nur hält Ihre verschiedenen Ansichten (happyThing, newThing, etc). Ich hoffe es hilft!

Beantwortet am 27/03/2010 um 22:13
quelle vom benutzer

stimmen
40

Aus dem Apple Dev Site:

Um Ihre Anwendung im Landscape-Modus zu starten, so dass die Statusleiste in der entsprechenden Position ist sofort, bearbeiten Sie Ihre Datei Info.plist die UIInterfaceOrientation Schlüssel mit dem entsprechenden Wert (UIInterfaceOrientationLandscapeRight oder UIInterfaceOrientationLandscapeLeft) hinzuzufügen, wie in Listing 2 gezeigt.

Listing 2: Starten Sie Ihre Anwendung im Querformat

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
Beantwortet am 31/08/2008 um 15:38
quelle vom benutzer

stimmen
27

Zusammenfassung und Integration von allen Posten, nachdem es selbst zu testen; Überprüfen Sie das Update für 4.x, 5.x unten.

Ab 3.2 können Sie die Ausrichtung einer laufenden Anwendung von Code nicht ändern.

Aber Sie können eine Anwendung mit einer festen Ausrichtung beginnen, auch wenn dabei nicht einfach ist.

Versuchen Sie, mit diesem Rezept:

  1. stellen Sie Ihre Orientierung UISupportedInterfaceOrientationsin der Info.plistDatei
  2. in Ihrem Fenster einen 480x320 „Basis-View-Controller“ definieren. Jede andere Ansicht als ein Subview seiner Ansicht hinzugefügt werden.
  3. in allen View - Controller die einrichten shouldAutorotateToInterfaceOrientation:Methode (den gleichen Wert zurückgeben Sie in dem plist definiert, natürlich)
  4. in allen View-Controller eine Hintergrundansicht mit

    self.view.frame = CGRectMake(0, 0, 480, 320)

    in dem viewDidLoadVerfahren.

Update (iOS 4.x, 5.x) : der Apple iOS App Programming Guide hat einen "Starten im Querformat - Modus" Absatz in den "Advanced App Tricks" Kapiteln.

Verweise:

Beantwortet am 07/05/2010 um 12:02
quelle vom benutzer

stimmen
7

Zuerst stelle ich in info.plist

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>

dann habe ich diesen Code in applicationDidFinishLaunching:

CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57079633);
[window setTransform:rotate];

CGRect contentRect = CGRectMake(0, 0, 480, 320); 
window.bounds = contentRect; 
[window setCenter:CGPointMake(160.0f, 240.0f)]; 

Auf diese Weise kann ich in Interface Builder im Querformat auf die Ansicht arbeiten.

Beantwortet am 20/11/2009 um 21:58
quelle vom benutzer

stimmen
6

SASB ist und michaelpryor Antwort scheint korrekt zu sein, aber wenn es für Sie nicht funktioniert, versuchen Sie diese Alternative:

- (void)applicationDidFinishLaunchingUIApplication *)application {
    application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}

Oder dieses:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Oder dieses:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

Sie können auch anrufen müssen window makeKeyAndVisible;zuerst.

Ein paar Links: Die Entwicklung im Landschaftsmodus , iPhone SDK: Wie nur Landscape - Modus zwingen?

@ Robert: finden Sie in das iPhone SDK, NDA und Stack - Überlauf .

Beantwortet am 31/08/2008 um 16:01
quelle vom benutzer

stimmen
5

Ich bin überrascht, niemand hat mit dieser Antwort kommt noch:

In allen meinen Tests , wenn eine modal View - Controller Entlassung stellen Sie den übergeordneten View - Controller bevorzugte Orientierung in shouldAutorotateToInterfaceOrientationselbst wenn ein Teil eines UINavigationController geehrt. So ist die Lösung dieses Problems ist einfach:

Erstellen Sie einen Dummy-UIViewController mit einem UIImageView für einen Hintergrund. Stellen Sie das Bild auf dem default.png Bild Ihrer App beim Start verwendet.

Wenn viewWillAppearin Ihren Root - View - Controller aufgerufen wird, stellt nur den Dummy - View - Controller ohne Animation.

wenn viewDidAppearin Ihren Dummy - View - Controller aufgerufen wird, schließen Sie den View - Controller mit einem schönen Kreuz auflösen Animation.

Nicht nur , dass diese Arbeit, aber es sieht gut aus ! BTW, nur zur Klarstellung ich tun , um das Root - View - Controller ist viewWillAppearwie folgt aus :

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
Beantwortet am 27/11/2010 um 08:38
quelle vom benutzer

stimmen
4

Der neueste iPhone OS Programming Guide hat einen vollen Abschnitt auf diesem, mit Beispielcode. Ich bin sicher, dies ist ein neuer Zusatz, so vielleicht haben Sie es verpasst haben. Es erklärt alle Voraussetzungen Sie erfüllen müssen mit; Grundsätzlich gilt...

  • stellen Sie die Info.plist Eigenschaften (dies die Position der Statusleiste ändert, aber nicht der Ansicht)
  • drehen Sie Ihre Ansicht manuell um seine Mitte, entweder auf Ihrem UIViewController viewDidLoad: Methode oder Ihr applicationDidFinishLaunching: Methode oder implementieren automatische Rotation ( „die automatischen Verhaltensweisen“, Seite 124)

Suchen Sie nach „Starten im Querformat-Modus“, Seite 102.

Beantwortet am 04/09/2008 um 22:57
quelle vom benutzer

stimmen
3

Siehe diese Antwort: Querformat - Modus NUR für iPhone oder iPad

  1. hinzufügen Orientierung plist
  2. ShouldAutorotateToInterfaceOrientation = YES in allen Dateien

Obwohl, wenn Sie Misch-Modi verwenden, könnten Sie besser dran mit

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Beantwortet am 06/03/2011 um 08:56
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more