Frage

Notiz:Diese Frage stammt aus dem Jahr 2008 und ist jetzt nur noch von historischem Interesse.


Wie lässt sich am besten eine iPhone-Anwendung erstellen, die von Anfang an im Querformat läuft, unabhängig von der Position des Geräts?

Sowohl programmgesteuert als auch mit dem Interface Builder.

War es hilfreich?

Lösung

Nur historische Antwort.Spektakulär veraltet:

Bitte beachten Sie, dass diese Antwort inzwischen völlig veraltet ist.

Dieser Beitrag ist nur eine historische Kuriosität.


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

Es scheint, dass es NICHT mehr notwendig ist, die Größe der Ansicht bei jeder Ansicht zu erzwingen, und das spezifische schwerwiegende Problem, dass die Landschaft „nur beim ersten Mal funktioniert“, wurde gelöst.

Seit April 2011 ist es nicht mehr möglich, etwas unter 4.0 zu testen oder gar zu bauen, daher handelt es sich bei der Frage lediglich um eine historische Kuriosität.Es ist unglaublich, wie viel Ärger es den Entwicklern so lange bereitet hat!


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


Es ist EXTREM SCHWIERIG, dies vollständig zum Laufen zu bringen – es sind mindestens drei Probleme/Bugs im Spiel.

Versuche dies .. Interface-Builder-Landschaftsdesign

Beachten Sie insbesondere, dass dort, wo es steht „Und Sie müssen ShouldAutorotateToInterfaceOrientation überall richtig verwenden.“ es bedeutet überall, alle Ihre Vollbildansichten.

Ich hoffe, es hilft in diesem Albtraum!

Eine wichtige Erinnerung an das ZUSÄTZLICHE bekannte Problem, das hier vorliegt:wenn Sie versuchen, zwischen zu wechseln MEHR ALS EINE Ansicht (alles im Querformat), ES FUNKTIONIERT EINFACH NICHT.Denken Sie unbedingt daran, sonst verschwenden Sie Tage mit dem Problem.Es ist buchstäblich NICHT MÖGLICH.Es handelt sich um den größten offenen, bekannten 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 lästige, aber einfache Problemumgehung, und was Sie tun müssen, besteht darin, einen trivialen Master-UIViewController zu haben, der nichts weiter tut, als da zu sitzen und Ihnen das Wechseln zwischen Ihren Ansichten zu ermöglichen.

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

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

Das können Sie nur einmal machen.Wenn Sie später versuchen, happyThing.view zu entfernen und stattdessen newThing.view dort einzufügen, FUNKTIONIERT ES NICHT – UND DAS WARS.Die Maschine dreht die Ansicht niemals ins Querformat.Es gibt keine Tricklösung, selbst Apple kann es nicht zum Laufen bringen.Die Problemumgehung, die Sie übernehmen müssen, besteht darin, einen allgemeinen UIViewController zu haben, der einfach da sitzt und nur Ihre verschiedenen Ansichten (happyThing, newThing usw.) enthält.Ich hoffe es hilft!

Andere Tipps

Von der Apple Dev Site:

Um Ihre Anwendung im Landschaftsmodus so zu starten, dass sich die Statusleiste sofort in der entsprechenden Position befindet, bearbeiten Sie Ihre Info.plist -Datei, um den Taste von UiInterfaceorientation mit dem entsprechenden Wert hinzuzufügen (UiInterfaceorientationScaperight oder UiInterfaceorientationScapeScapeft), wie in Auflistung 2 gezeigt.

Auflistung 2:Starten Sie Ihre Anwendung im Landschaftsmodus

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

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

Ab 3.2 können Sie die Ausrichtung einer laufenden Anwendung nicht mehr über den Code ändern.

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

Versuchen Sie es mit diesem Rezept:

  1. Stellen Sie Ihre Ausrichtung auf ein UISupportedInterfaceOrientations im Info.plist Datei
  2. Definieren Sie in Ihrem Fenster einen 480 x 320 großen „Basisansichtscontroller“.Jede andere Ansicht wird als Unteransicht zu ihrer Ansicht hinzugefügt.
  3. In allen View-Controllern wird das eingerichtet shouldAutorotateToInterfaceOrientation: Methode (um natürlich denselben Wert zurückzugeben, den Sie in der Plist definiert haben)
  4. Legen Sie in allen Ansichtscontrollern eine Hintergrundansicht fest

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

    im viewDidLoad Methode.

Update (iOS 4.x, 5.x):Im Apple iOS App-Programmierhandbuch gibt es im Kapitel „Erweiterte App-Tricks“ einen Absatz „Starten im Querformat“.

Verweise:

Zuerst habe ich info.plist eingefügt

<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.

Die Antwort von sasb und michaelpryor scheint richtig zu sein, aber wenn sie bei Ihnen nicht funktioniert, versuchen Sie es mit dieser 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 anrufen window makeKeyAndVisible; Erste.

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

@Robert:bitte beziehen Sie sich auf Das iPhone SDK, NDA und Stack Overflow.

Ich bin überrascht, dass noch niemand auf diese Antwort gekommen ist:

In allen meinen Tests wurde beim Verwerfen eines modalen Ansichtscontrollers die bevorzugte Ausrichtung des übergeordneten Ansichtscontrollers festgelegt shouldAutorotateToInterfaceOrientation wird auch dann berücksichtigt, wenn es Teil eines UINavigationControllers ist.Die Lösung hierfür ist also einfach:

Erstellen Sie einen Dummy-UIViewController mit einem UIImageView als Hintergrund.Legen Sie das Bild auf das Standard-PNG-Bild fest, das Ihre App beim Start verwendet.

Wann viewWillAppear Wird in Ihrem Root-View-Controller aufgerufen. Präsentieren Sie einfach den Dummy-View-Controller ohne Animation.

Wann viewDidAppear Wird in Ihrem Dummy-View-Controller aufgerufen, schließen Sie den View-Controller mit einer schönen Cross-Dissolve-Animation.

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

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

Das neueste iPhone OS-Programmierhandbuch enthält einen vollständigen Abschnitt dazu mit Beispielcode.Ich bin mir sicher, dass dies eine neue Ergänzung ist. Vielleicht haben Sie sie also verpasst.Es erläutert alle Bedingungen, die Sie einhalten 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 ihre Mitte, entweder auf Ihrem UIViewController viewDidLoad:Methode oder Ihre applicationDidFinishLaunching:Methode oder implementieren Sie die automatische Drehung („Autoresizing-Verhalten“, Seite 124)

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

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

  1. Ausrichtung zur Plist hinzufügen
  2. ShouldAutorotateToInterfaceOrientation = YES in allen Dateien

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

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top