ios - iPhone App im Querformat, 2008 Systeme

Translate

Bitte beachten Sie, dass diese Frage aus dem Jahr 2008 stammt und jetzt nur noch von historischem Interesse ist.


Was ist der beste Weg, um eine iPhone-Anwendung zu erstellen, die von Anfang an im Querformat ausgeführt wird, unabhängig von der Position des Geräts?

Sowohl programmgesteuert als auch mit dem Interface Builder.

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Nur historische Antwort. Spektakulär veraltet.

Bitte beachten Sie, dass diese Antwort jetzt sehr veraltet ist.

Diese Antwort lautetnur eine historische Neugier.


Aufregende Neuigkeiten! Wie Andrew unten herausgefunden hat, wurde dieses Problem von Apple in 4.0+ behoben.

Es scheint, dass es NICHT mehr erforderlich ist, die Größe der Ansicht für jede Ansicht zu erzwingen, und das spezifische ernsthafte Problem der Landschaft "nur beim ersten Mal funktioniert" wurde gelöst.

Ab April 2011 ist es nicht möglich, etwas unter 4.0 zu testen oder gar zu bauen, daher ist die Frage eine rein historische Kuriosität. Es ist unglaublich, wie viel Ärger es Entwicklern so lange bereitet hat!


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


Es ist EXTREM SCHWIERIG, diese Funktion vollständig auszuführen - es sind mindestens drei Probleme / Fehler im Spiel.

Versuche dies ..Interface Builder Landschaftsgestaltung

Beachten Sie insbesondere, wo es heißt"und Sie müssen shouldAutorotateToInterfaceOrientation überall richtig verwenden"es bedeutet überall alle Ihre Vollbildansichten.

Hoffe es hilft in diesem Albtraum!

Eine wichtige Erinnerung an das ZUSÄTZLICHE bekannte Problem, das hier vorliegt: Wenn Sie versuchen, zwischen den beiden zu wechselnMEHR ALS EINEAnsicht (alle Landschaft),ES FUNKTIONIERT EINFACH NICHT. Denken Sie unbedingt daran, sonst verschwenden Sie Tage mit dem Problem. Es ist buchstäblich nicht möglich. Es ist der größte offene, bekannte Fehler auf der iOS-Plattform. Es gibt buchstäblich keine Möglichkeit, die Hardware so zu gestalten, dass die zweite Ansicht, die Sie laden, im Querformat angezeigt wird. Die nervige, aber einfache Problemumgehung und das, was Sie tun müssen, ist ein trivialer Master-UIViewController, der nichts anderes tut, als dort zu sitzen und Sie zwischen Ihren Ansichten wechseln zu lassen.

Mit anderen Worten, in iOS wegen eines großen bekannten Fehlers:

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

Sie können das nur einmal tun. Wenn Sie später versuchen, happyThing.view zu entfernen und stattdessen newThing.view dort einzufügen, FUNKTIONIERT ES NICHT - UND DAS IST DAS. Die Maschine dreht die Ansicht niemals in die Landschaft. Es gibt keine Trickkorrektur, auch Apple kann es nicht zum Laufen bringen. Die Problemumgehung, die Sie anwenden müssen, besteht darin, einen UIViewController zu haben, der einfach dort sitzt und nur Ihre verschiedenen Ansichten enthält (happyThing, newThing usw.). Ich hoffe es hilft!

Quelle
Translate

Von der Apple Dev Site:

Um Ihre Anwendung im Querformat zu starten, sodass sich die Statusleiste sofort an der entsprechenden Position befindet, bearbeiten Sie Ihre Info.plist-Datei, um den Schlüssel UIInterfaceOrientation 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>
Quelle
Translate

Zusammenfassung und Integration aller Beiträge, nachdem ich sie selbst getestet habe; Überprüfen Sie das Update für 4.x, 5.x unten.

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

Sie können eine Anwendung jedoch mit einer festen Ausrichtung starten, obwohl dies nicht einfach ist.

Versuchen Sie es mit diesem Rezept:

  1. Stellen Sie Ihre Ausrichtung auf einUISupportedInterfaceOrientationsin demInfo.plistDatei
  2. Definieren Sie in Ihrem Fenster einen 480x320 "Base View Controller". Jede andere Ansicht wird als Unteransicht zu ihrer Ansicht hinzugefügt.
  3. In allen View-Controllern richten Sie dieshouldAutorotateToInterfaceOrientation:Methode (um natürlich den gleichen Wert zurückzugeben, den Sie in der Liste definiert haben)
  4. In allen Ansichts-Controllern wird eine Hintergrundansicht mit festgelegt

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

    in demviewDidLoadMethode.

Update (iOS 4.x, 5.x): Das Programmierhandbuch für Apple iOS-Apps enthält einen Abschnitt "Starten im Querformat" im Kapitel "Erweiterte App-Tricks".

Verweise:

Quelle
Translate

Zuerst habe ich in info.plist gesetzt

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

dann habe ich diesen Code in applicationDidFinishLaunching eingefügt:

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 die Ansicht im Interface Builder im Querformat bearbeiten.

Quelle
Translate

Die Antwort von sasb und michaelpryor scheint richtig zu sein, aber wenn es bei Ihnen 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];

Möglicherweise müssen Sie auch anrufenwindow makeKeyAndVisible;zuerst.

Ein paar Links:Entwicklung im Querformat, iPhone SDK: Wie erzwinge ich nur den Querformatmodus?

@ Robert: Bitte beziehen Sie sich aufDas iPhone SDK, NDA und Stack Overflow.

Quelle
Translate

Ich bin überrascht, dass noch niemand diese Antwort gefunden hat:

Bei allen meinen Tests beim Entlassen eines Modal View Controllers wurde die bevorzugte Ausrichtung des übergeordneten View Controllers festgelegtshouldAutorotateToInterfaceOrientationwird auch dann geehrt, wenn es Teil eines UINavigationControllers ist. Die Lösung hierfür ist also einfach:

Erstellen Sie einen Dummy-UIViewController mit einer UIImageView als Hintergrund. Stellen Sie das Image auf das default.png-Image ein, das Ihre App beim Start verwendet.

WannviewWillAppearWird in Ihrem Root-View-Controller aufgerufen, präsentieren Sie einfach den Dummy-View-Controller ohne Animation.

wannviewDidAppearWird in Ihrem Dummy-View-Controller aufgerufen, schließen Sie den View-Controller mit einer netten Cross-Dissolve-Animation.

Das funktioniert nicht nur, es sieht auch gut aus! Übrigens, nur zur Verdeutlichung mache ich die Root View ControllerviewWillAppearso was:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
Quelle
Muriel Lee
Translate

Das neueste Programmierhandbuch für iPhone OS enthält einen vollständigen Abschnitt mit Beispielcode. Ich bin mir sicher, dass dies eine neue Ergänzung ist. Vielleicht haben Sie sie verpasst. Es werden alle Bedingungen erläutert, die Sie erfüllen müssen. Grundsätzlich...

  • Legen Sie die Info.plist-Eigenschaften fest (dies ändert die Position der Statusleiste, nicht jedoch die Ansicht).
  • Drehen Sie Ihre Ansicht manuell um die Mitte, entweder auf Ihrer UIViewController viewDidLoad: -Methode oder Ihrer applicationDidFinishLaunching: -Methode, oder implementieren Sie die automatische Drehung ("Verhalten beim automatischen Ändern der Größe", Seite 124).

Suchen Sie nach "Starten im Querformat", Seite 102.

Quelle
Translate

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

  1. Fügen Sie der Plist Orientierung hinzu
  2. shouldAutorotateToInterfaceOrientation = YES in allen Dateien

Wenn Sie jedoch gemischte Modi verwenden, sind Sie möglicherweise besser dran

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Quelle