2010-12-12 8 views
19

eine noob Frage hier.Wie behandelt man UIDeviceOrientationFaceUp und UIDeviceOrientationFaceDown?

i erkennt die Ausrichtung mit:

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];

ist alles schön und gut, und ich neu positionieren meine Textfelder und Etiketten gemäß der berichteten Orientierung mit

if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown)

und else { } für alles andere

das Problem, das ich erst kürzlich entdeckt habe ist, wenn die Berichte UIDeviceOrientationFaceUp oder UIDeviceOrientationFaceDown meldet. Wie gehe ich mit dieser Situation um? Woher weiß ich, ob UIDeviceOrientationFaceUp und UIDeviceOrientationFaceDown in Portrait oder Landscape passiert? Ich weiß, dass das Gerät nach oben oder unten zeigt, aber ich weiß nicht, ob ich alles auf Hochformat oder Querformat neu positionieren sollte.

danke!

Antwort

33

Apple empfiehlt die Verwendung Gerät Ausrichtung für Ansichtslayout. Stattdessen verfügt jeder Ansichtssteuerungscontroller über eine interfaceOrientation-Eigenschaft und UIApplication über eine statusBarOrientation-Eigenschaft, die beide die aktuelle Schnittstelle Ausrichtung zurückgeben, die für Ansichtslayout geeignet ist.

Um auf Änderungen zu überwachen, gibt es UIViewController Methoden wie willRotateToInterfaceOrientation:duration:, die aufgerufen werden und Benachrichtigungen wie UIApplicationWillChangeStatusBarOrientationNotification, die gebucht werden, wenn eine Änderung der Schnittstellenausrichtung auftritt.

+0

danke, das sieht vielversprechend aus. Ich werde einen Blick darauf werfen – TrekOnTV2017

+0

Dies ist die richtige Antwort, nur Refactoring der UIDevice Orientierungsantwort (wie der Blog vorschlägt) ist nicht so gut wie die SchnittstelleOrientation des UIViewController zu hören. Gute Arbeit. – Jessedc

+0

Ich mag diese Antwort auch besser. caprica13, kannst du das hier als richtig bezeichnen? –

4

Dieser Blogpost hier: http://blogs.remobjects.com/blogs/mh/2010/06/29/p1685 erklärt es wirklich gut.

+0

perfekt! Ich habe die Änderungen vorgenommen und alles scheint jetzt gut zu funktionieren. Danke. – TrekOnTV2017

+0

Das wackelige Thema gibt mir Kopfschmerzen, gah – Alex

+0

hahaha stell dir vor, wenn Apples Objective-C/Frameworks-Dokumentation so aussieht! –

-1

Ich habe die gleichen Probleme mit

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

Diese Methode Benachrichtigungen möglichen Gerätepositionszustände erzeugen 7:

UIDeviceOrientationPortrait 
UIDeviceOrientationPortraitUpsideDown 
UIDeviceOrientationLandscapeLeft 
UIDeviceOrientationLandscapeRight 
UIDeviceOrientationFaceUp 
UIDeviceOrientationFaceDown 
UIDeviceOrientationUnknown 

Aber ich brauche nur die ersten 4, auch das ist mein Ansatz, um dieses Problem zu lösen (mit Code enthalten): How to handle UIDeviceOrientation for manage views layouts

0

Ein bisschen spät, hoffentlich würde es jemandem helfen.

Für iOS 6.0 und höher:

1) Stellen Sie diesen Code während der Ansicht Setup-Rotation Benachrichtigung zu erhalten:

// Set Listener to receive orientation notifications from the device 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(detectOrientation) 
               name:UIDeviceOrientationDidChangeNotification 
              object:nil]; 

2) diesen Code Stellen Sie die Mitteilung nach der Drehung zu fangen:

-(void)detectOrientation{  
    switch ([[UIDevice currentDevice] orientation]) { 
    case UIDeviceOrientationFaceDown:{ 
     NSLog(@"UIDeviceOrientationFaceDown"); 
     break; 
    } 
    case UIDeviceOrientationFaceUp:{ 
     NSLog(@"UIDeviceOrientationFaceUp"); 
     break; 
    } 
    case UIDeviceOrientationLandscapeLeft:{ 
     NSLog(@"UIDeviceOrientationLandscapeLeft"); 
     break; 
    } 
    case UIDeviceOrientationLandscapeRight:{ 
     NSLog(@"UIDeviceOrientationLandscapeRight"); 
     break; 
    } 
    case UIDeviceOrientationPortrait:{ 
     NSLog(@"UIDeviceOrientationPortrait"); 
     break; 
    } 
    case UIDeviceOrientationPortraitUpsideDown:{ 
     NSLog(@"UIDeviceOrientationPortraitUpsideDown"); 
     break; 
    } 
    case UIDeviceOrientationUnknown:{ 
     NSLog(@"UIDeviceOrientationUnknown"); 
     break; 
    } 
    default:{ 
     break; 
    } 
    } 

} 
Verwandte Themen