2010-01-22 12 views
5

Ich habe eine Tonne auf Rotation gelesen, aber keine Lösung für meine Abfrage gefunden. Hier gehts:iPhone force rotation

Ich habe eine Portrait-Anwendung mit einer Tableiste und versteckten Navigations-Controller in meiner Registerkarte. An einem Punkt in der App muss die nächste Ansicht im Querformat angezeigt werden.

Das XIB-Layout wurde im Querformat erstellt, daher möchte ich das XIB ohne jegliche Übersetzung oder Pixel-Moving-Code aufrufen. (Ich denke, das ist nicht erforderlich) Ich habe versucht, nur die Ansicht zu schieben (bleibt im Hochformat), verschiebe die Ansicht mit verschiedenen Methoden (nicht scheinen, die Sache richtig zu ordnen).

Gibt es eine Möglichkeit, die Ansicht zu teilen, dass sie bereits vor dem Öffnen für die Landschaft ausgelegt ist?

Vielen Dank im Voraus!

+0

eine Antwort auf diese Frage finden Sie [hier] [1] [1]: http://stackoverflow.com/questions/181780/is-there-a-documented-way-to-set -the-iphone-orientation –

+0

Genauer gesagt, werfen Sie einen Blick auf die Antwort von 77-upvotes zu dieser Frage: http://stackoverflow.com/a/4915378/39974 - Drücken und Knacken eines Dummy-View-Controllers scheint zumindest gut zu funktionieren und einschließlich iOS 5.1. –

Antwort

3

Ich bin sicher, dass Sie eine Rotation nicht "erzwingen" können. Das System entscheidet, wann die Ausrichtung des Geräts geändert werden soll. Die Eigenschaften der Ausrichtung sind also im Wesentlichen schreibgeschützt. Ich habe das gleiche Problem schon vor langer Zeit untersucht, als ich sicherstellen wollte, dass eine bestimmte Ansicht immer in einer Richtung angezeigt wird.

Aus diesem Grund erlauben die meisten Apps, dass alle Ansichten und View-Controller in jeder von der App unterstützten Ausrichtung funktionieren. Ich habe festgestellt, dass der Versuch, das Verhalten einiger Ansichten und Ansichts-Controller einzuschränken, letztendlich zu größeren Problemen führt und Probleme beim Übergang zwischen Ansichten und Ansichts-Controllern verursachen kann.

Der von Ihnen gepostete Code funktioniert für Ihre Ansicht. Du änderst überhaupt nicht die Ausrichtung; Ihre Ansicht verhält sich nur so, als ob sie rotiert wurde. Ich bin mir nicht sicher, ob Sie das Gleiche mit der Navigationsleiste tun können oder nicht, aber es ist einen Versuch wert. Wenn Sie die Ansichtseigenschaften der Navigationsleiste steuern können (dies ist ebenfalls eine UIView), sollte das gleiche Muster, das Sie für Ihre benutzerdefinierte Ansicht verwenden, funktionieren.

Die meisten Apps, die nur in der Landschaft angezeigt werden möchten, zwingen ihre gesamte App dazu, sich im Querformat zu befinden. Zum Beispiel unterstützt Flight Control nur eine Ausrichtung. Somit ist der Zeichnungscode ziemlich einfach; Unabhängig von der Ausrichtung, zeichnen Sie einfach die Ansicht und drehen Sie sie auf die eine Ausrichtung, die sie unterstützt (entweder Querformat links oder rechts).

Das Design Ihrer App wäre nicht so einfach ... Es klingt, als würden Sie keine Vollbild-App entwickeln. Sie müssen sich sorgen, dass die Navigationsleiste und die Statusleiste richtig gezeichnet werden.

+0

Ausgezeichneter Punkt, ich hatte aus dieser Perspektive nicht darüber nachgedacht. –

7

Fand es, dieser Code den Trick im viewDidLoad tut:

self.view.transform = CGAffineTransformIdentity; 
self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
self.view.bounds = CGRectMake(0.0, 0.0, 460.0, 320.0); 

Noch 1 Seltsame haben. Egal, was ich mache, um die Navigationsleiste zu verstecken, sie dreht sich nicht und bleibt auf der linken Seite der Ansicht.

[[self navigationController] setNavigationBarHidden:YES animated:NO]; 

Hat jemand dieses Verhalten und gelöst?