7

Wie der Titel. Der Aufruf von [[UIDevice currentDevice] BeginGeneratingDeviceOrientationNotifications] hat keine Auswirkungen.UIDevice currentDevice "Orientierung" immer Null

DidRotateToInterfaceOrientation usw. Ereignisse funktionieren gut, aber ich muss die Geräteausrichtung beliebig abfragen können.

Wie kann ich das beheben? Die lange Geschichte: Ich habe eine Registerkarte Anwendung mit einem Navigationscontroller auf jeder Registerkarte. Die Stammansicht von Registerkarte 1 ist eine Grafik, die im Vollbildmodus angezeigt wird, wenn die Ausrichtung in Querformat geändert wird. Dies muss jedoch überprüft werden, wenn die Ansicht angezeigt wird, da die Änderung der Ausrichtung an anderer Stelle aufgetreten sein könnte. Daher wollte ich den Orientierungsstatus abfragen, wenn diese Ansicht angezeigt wird.

Antwort

0

Würde [[UIDevice currentDevice] orientation] Ihnen den aktuellen Orientierungsstatus geben? Sie können dies in Ihrer viewWillAppear-Methode des View-Controllers überprüfen, der abfragen möchte.

Bearbeiten: Darüber hinaus gibt es verschiedene Möglichkeiten zum Abrufen der aktuellen Ausrichtung, z. B. die Verwendung der statusBarOrientation-Eigenschaft in UIApplication oder der interfaceOrientation-Eigenschaft in UIViewcontroller.

+0

Sieht aus wie Sie die Frage nicht gelesen haben. Er sagt, dass diese Methode NULL zurückgibt, obwohl er beginGeneratingOrientationNotifications aufruft. – Jasarien

2

scheint wie eine dumme Frage, aber ist es nicht

beginGeneratingDeviceOrientationNotifications

(Kleinbuchstaben b) ...

9

UIDevice Begriff der Orientierung nur zu sein scheint verfügbar auf tatsächlichen Geräten. Der Simulator gibt immer 0 zurück, unabhängig davon, ob die Benachrichtigungen aktiviert wurden, wie es die Dokumente vorschlagen. Ärgerlich unangenehm, aber du gehst.

Das finde ich auf dem tatsächlichen Gerät einwandfrei funktioniert:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    NSLog(@"orientation: %d", [[UIDevice currentDevice] orientation]); 
    [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; 
+1

Ja, nur verschwendete 2h versucht herauszufinden, was falsch war, aber in der Tat war es nur der Simulator. Alles funktioniert gut auf dem Gerät. – samvermette

+3

[[UIDevice currentDevice] orientation] funktioniert nicht, wenn der Benutzer seine Geräteausrichtung vom Springboard aus gesperrt hat. Orientierung ist immer der letzte Wert, und es gibt keine Benachrichtigungen für Änderungen. – Jeff

+5

UIDeviceOrientation interfaceOrientation = [UIApplication sharedApplication] .statusBarOrientation; diese Alternative funktionierte für mich – iMeMyself

1

Wenn Sie [[UIDevice currentDevice] orientation] in - (void)viewDidLoad überprüfen Sie immer Null bekommen.

es in * - (void) viewDidAppear:(BOOL) * animierte Methode prüfen und Sie

+1

"... du wirst immer' nil' "bekommen. Ist das dokumentiert? –

1

dies ist gemäß iMeMyself oben in den Kommentaren gesagt - das samed mir viel Zeit und ich denke, die richtige Antwort ist so ich hervorheben wollte es hier:

UIDeviceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation; 

if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) 
{ 
    //do stuff here 
} 
else if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) 
{ 
//or do stuff here 
} 
+0

dies funktionierte für mich, aber sollte es nicht 'UIInterfaceOrientation interfaceOrientation = [....'? – Jimmery

+0

aktualisiert für die Verwendung oben – craigk