UIViewController wird nicht automatisch gedreht

7

Wie der Titel sagt. Mein UIViewController dreht sich nicht, egal was passiert. Wenn es lädt, wirdAutorotateToInterfaceOrientation aufgerufen, aber danach tut es nicht.

UPDATE 1:

Es ist ein wirklich wirklich seltsames Problem. Zumindest für mich. Und ich werde versuchen, alles zu erklären.

Es ist eine navigationsbasierte App. Jeder Controller hat

%Vor%

Xcontroller ist ein Kind von Acontroller und es rotiert nicht automatisch. Wenn XController ein Kind von Bcontroller wird, wird es automatisch umdrehen. Da stimmt etwas mit Acontroller nicht. Aber Controller ist identisch (außer seinen Daten) zu Bcontroller.

Was ist falsch?

UPDATE 2:

Ich habe beschlossen, Acontroller neu zu erstellen. Und es hat funktioniert. Ich glaube, ich habe etwas Dummes verpasst.

    
looneygrc 10.03.2010, 11:29
quelle

9 Antworten

15

Ich bin mir nicht sicher, ob es der gleiche Grund wie in Ihrem Fall ist. Aber ich habe das Gleiche erlebt. Das shouldAutorotateToInterfaceOrientation wurde nur einmal am Anfang aufgerufen. Nach einigem ernsthaften Debuggen, indem ich Code auseinander nahm, fand ich, dass der Grund in meiner überschriebenen init Methode ist. Ich hatte das schon vorher:

%Vor%

Und dann habe ich das geändert

%Vor%

Hinweis: Der einzige Unterschied ist, dass ich [super init] hinzugefügt habe, um die Eltern-Init aufzurufen. Nach dieser Änderung funktioniert die Rotation gut und die shouldAutorotateToInterfaceOrientation wird jedes Mal aufgerufen, wenn ich den Bildschirm rotiere. Hoffe diese Hilfe.

    
DaiLak 21.06.2010, 16:00
quelle
8

Es gibt mehrere mögliche Gründe, warum sich der View-Controller nicht dreht.

Siehe Apples offizielles Q & A zu diesem Thema:

  

Warum dreht sich mein UIViewController nicht mit dem Gerät?

     

Ссылка

    
nybon 16.10.2010 09:45
quelle
5

Apple Q & A hat die detaillierte Lösung für das Problem.

Warum dreht sich mein UIViewController nicht mit dem Gerät?

Ссылка

Wenn Sie einen viewcontroller.view zu uiwindow hinzufügen, sollten Sie diesen viewcontroller als rootviewcontroller setzen.

%Vor%     
Vanguarder 11.01.2012 05:30
quelle
3

Ich hatte das gleiche Problem - der Grund war, dass es mein erster UIViewController war, den ich im laufenden Betrieb in meinem ApplicationDelegate erstellt habe, den View zu meinem UIWindow hinzugefügt und ihn sofort freigegeben habe.

Das ist natürlich nicht korrekt, da ich gerade die UIView des UIViewControllers hinzugefügt habe (und sie beibehalten habe) und dann den gesamten Controller freigegeben habe.

Sie sollten stattdessen Ihren ersten UIViewController als Instanzvariable in Ihrem ApplicationDelegate hinzufügen und in der Dealloc-Methode Ihres ApplicationDelegate freigeben.

    
Ganayan 08.01.2011 11:42
quelle
2
___ qstnhdr ___ UIViewController wird nicht automatisch gedreht ___ qstntxt ___

Wie der Titel sagt. Mein UIViewController dreht sich nicht, egal was passiert. Wenn es lädt, wirdAutorotateToInterfaceOrientation aufgerufen, aber danach tut es nicht.

UPDATE 1:

Es ist ein wirklich wirklich seltsames Problem. Zumindest für mich. Und ich werde versuchen, alles zu erklären.

Es ist eine navigationsbasierte App. Jeder Controller hat

%Vor%

Xcontroller ist ein Kind von Acontroller und es rotiert nicht automatisch. Wenn XController ein Kind von Bcontroller wird, wird es automatisch umdrehen. Da stimmt etwas mit Acontroller nicht. Aber Controller ist identisch (außer seinen Daten) zu Bcontroller.

Was ist falsch?

UPDATE 2:

Ich habe beschlossen, Acontroller neu zu erstellen. Und es hat funktioniert. Ich glaube, ich habe etwas Dummes verpasst.

    
___ answer3948369 ___

Es gibt mehrere mögliche Gründe, warum sich der View-Controller nicht dreht.

Siehe Apples offizielles Q & A zu diesem Thema:

  

Warum dreht sich mein UIViewController nicht mit dem Gerät?

     

Ссылка

    
___ answer4633688 ___

Ich hatte das gleiche Problem - der Grund war, dass es mein erster UIViewController war, den ich im laufenden Betrieb in meinem ApplicationDelegate erstellt habe, den View zu meinem UIWindow hinzugefügt und ihn sofort freigegeben habe.

Das ist natürlich nicht korrekt, da ich gerade die UIView des UIViewControllers hinzugefügt habe (und sie beibehalten habe) und dann den gesamten Controller freigegeben habe.

Sie sollten stattdessen Ihren ersten UIViewController als Instanzvariable in Ihrem ApplicationDelegate hinzufügen und in der Dealloc-Methode Ihres ApplicationDelegate freigeben.

    
___ answer8814624 ___

Apple Q & A hat die detaillierte Lösung für das Problem.

Warum dreht sich mein UIViewController nicht mit dem Gerät?

Ссылка

Wenn Sie einen viewcontroller.view zu uiwindow hinzufügen, sollten Sie diesen viewcontroller als rootviewcontroller setzen.

%Vor%     
___ antwort4385047 ___

Stellen Sie außerdem sicher, dass die Rotationssperre nicht aktiviert ist. Ich verbrachte eine gute Stunde damit, herauszufinden, warum meine Ansichten aufhörten, sich zu drehen. shouldAutorotateToInterfaceOrientation wurde nur einmal beim Start aufgerufen und wenn Game Center Ranglisten / Erfolge präsentiert wurden.

    
___ answer11679538 ___

In meinem Fall befand sich der ViewController in einem NavigationController, der von einem "parent" viewControlled verwendet wurde, der die Orientierungsänderungen erhalten hat.

Was ich in diesem Elternteil gemacht habe, war:

%Vor%

Auf diese Weise können Sie Ihre eigene Orientierungsänderungslogik abhängig vom aktuell sichtbaren Controller implementieren.

    
___ answer3086242 ___

Ich bin mir nicht sicher, ob es der gleiche Grund wie in Ihrem Fall ist. Aber ich habe das Gleiche erlebt. Das %code% wurde nur einmal am Anfang aufgerufen. Nach einigem ernsthaften Debuggen, indem ich Code auseinander nahm, fand ich, dass der Grund in meiner überschriebenen init Methode ist. Ich hatte das schon vorher:

%Vor%

Und dann habe ich das geändert

%Vor%

Hinweis: Der einzige Unterschied ist, dass ich %code% hinzugefügt habe, um die Eltern-Init aufzurufen. Nach dieser Änderung funktioniert die Rotation gut und die shouldAutorotateToInterfaceOrientation wird jedes Mal aufgerufen, wenn ich den Bildschirm rotiere. Hoffe diese Hilfe.

    
___ answer2418247 ___
  • (BOOL) sollteAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation {return YES; } Die obige Methode, wenn Sie verwenden, können Sie viele Zeit aufrufen, wenn Sie wollen, ohne Fehler.
___ tag123iphone ___ Verwenden Sie diesen Tag NICHT, es sei denn, Sie wenden sich speziell an Apple's iPhone und / oder iPod touch. Verwenden Sie für nicht hardwareabhängige Fragen das Tag [ios]. Weitere zu betrachtende Tags sind [xcode] (aber nur, wenn es sich um die IDE selbst handelt), [swift], [objective-c] oder [cacao-touch] (aber nicht [cocoa]). Bitte verzichten Sie auf Fragen zum iTunes App Store oder zu iTunes Connect. Wenn Sie C # verwenden, markieren Sie mit [mono]. ___ tag123uiviewcontroller ___ Die UIViewController-Klasse verwaltet die Ansichten in iOS-Apps und vermittelt die Interaktion zwischen den Ansichten einer App, den zugrunde liegenden Modellobjekten und dem gesamten Workflow. ___ answer11073132 ___

Ich habe das gleiche Problem, aber mit zwei View-Controllern, die dem UIWindow der Anwendung hinzugefügt wurden. Der Grund ist Die UIView-Eigenschaft des View-Controllers ist in UIWindow eingebettet, aber neben einem zusätzlichen View-Controller

Von Apple Technical Q & A

Ссылка

    
___ answer2418758 ___

Ich denke, hier gibt es kein merkwürdiges Verhalten, es heißt nur eines, das richtig ist. Sie müssen nicht mehr als einen Anruf tätigen, um zu entscheiden, ob das Gerät in eine Richtung drehen soll oder nicht.

Diese Methode fragt nur, ob das Gerät in eine Richtung drehen soll oder nicht. Wenn Sie die Orientierungsänderung behandeln möchten, sollten Sie sich für die Benachrichtigung von der UIDeviceDidChangeOrientationNotification anmelden und die folgende Methode überschreiben:

%Vor%

Weitere Informationen finden Sie hier .

    
___
Blackmouth 08.12.2010 07:18
quelle
1

In meinem Fall befand sich der ViewController in einem NavigationController, der von einem "parent" viewControlled verwendet wurde, der die Orientierungsänderungen erhalten hat.

Was ich in diesem Elternteil gemacht habe, war:

%Vor%

Auf diese Weise können Sie Ihre eigene Orientierungsänderungslogik abhängig vom aktuell sichtbaren Controller implementieren.

    
htafoya 26.07.2012 23:33
quelle
0
  • (BOOL) sollteAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation {return YES; } Die obige Methode, wenn Sie verwenden, können Sie viele Zeit aufrufen, wenn Sie wollen, ohne Fehler.
Tirth 10.03.2010 15:46
quelle
0

Ich denke, hier gibt es kein merkwürdiges Verhalten, es heißt nur eines, das richtig ist. Sie müssen nicht mehr als einen Anruf tätigen, um zu entscheiden, ob das Gerät in eine Richtung drehen soll oder nicht.

Diese Methode fragt nur, ob das Gerät in eine Richtung drehen soll oder nicht. Wenn Sie die Orientierungsänderung behandeln möchten, sollten Sie sich für die Benachrichtigung von der UIDeviceDidChangeOrientationNotification anmelden und die folgende Methode überschreiben:

%Vor%

Weitere Informationen finden Sie hier .

    
Hoang Pham 10.03.2010 16:49
quelle
0

Ich habe das gleiche Problem, aber mit zwei View-Controllern, die dem UIWindow der Anwendung hinzugefügt wurden. Der Grund ist Die UIView-Eigenschaft des View-Controllers ist in UIWindow eingebettet, aber neben einem zusätzlichen View-Controller

Von Apple Technical Q & A

Ссылка

    
Basem Saadawy 17.06.2012 16:55
quelle

Tags und Links