2010-12-12 11 views
19

una domanda noob qui.come gestire UIDeviceOrientationFaceUp e UIDeviceOrientationFaceDown?

a rilevare l'orientamento con:

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];

tutto va bene e dandy e io riposizionare i miei campi di testo e le etichette a seconda dell'orientamento riportata con

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

e else { } per tutto il resto

il problema che ho scoperto solo di recente è quando lo segnala UIDeviceOrientationFaceUp o UIDeviceOrientationFaceDown. come gestisco questa situazione? come faccio a sapere se UIDeviceOrientationFaceUp e UIDeviceOrientationFaceDown sta accadendo in verticale o orizzontale? So che il dispositivo è rivolto verso l'alto o verso il basso, ma non so se dovrei riposizionare tutto su Verticale o Orizzontale.

grazie!

risposta

33

Apple raccomanda di non utilizzare l'orientamento dispositivo per il layout di visualizzazione. Invece, ciascun controller di visualizzazione ha una proprietà interfaceOrientation e UIApplication ha una proprietà statusBarOrientation, che restituiscono l'attuale interfaccia con l'interfaccia, che è adatta per il layout di visualizzazione.

Per controllare le modifiche, ci sono UIViewController metodi come willRotateToInterfaceOrientation:duration: che verranno chiamati e notifiche come UIApplicationWillChangeStatusBarOrientationNotification che verranno pubblicate quando si verifica un cambiamento di orientamento dell'interfaccia.

+0

grazie, sembra promettente. Prenderò un'occhiata – TrekOnTV2017

+0

Questa è la risposta corretta, solo il refactoring della risposta di orientamento UIDevice (come suggerisce il blog) non è buono come ascoltare l'interfacciaOrientation di UIViewController. Bel lavoro. – Jessedc

+0

Mi piace anche questa risposta. caprica13, potresti contrassegnare questo come corretto? –

4

Questo post del blog qui: http://blogs.remobjects.com/blogs/mh/2010/06/29/p1685 lo spiega molto bene.

+0

perfetto! ho fatto i cambiamenti e tutto sembra funzionare alla grande ora. grazie. – TrekOnTV2017

+0

Questo tema stupido mi dà un mal di testa, gah – Alex

+0

hahaha immagina se la documentazione di Objective-C/framework di Apple fosse così! –

-1

ho gli stessi problemi con

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

Questo metodo genera le notifiche per 7 possibile dispositivo stati posizionali:

UIDeviceOrientationPortrait 
UIDeviceOrientationPortraitUpsideDown 
UIDeviceOrientationLandscapeLeft 
UIDeviceOrientationLandscapeRight 
UIDeviceOrientationFaceUp 
UIDeviceOrientationFaceDown 
UIDeviceOrientationUnknown 

Ma ho solo bisogno i primi 4, e questo è il mio approccio per risolvere questo problema (con codice incluso): How to handle UIDeviceOrientation for manage views layouts

0

Un po 'in ritardo, si spera che possa aiutare qualcuno.

Per iOS 6.0 e versioni successive:

1) Impostare il codice durante il vostro Impostazione vista per ricevere la notifica di rotazione:

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

2) Impostare questo codice per prendere il notifica dopo la rotazione:

-(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; 
    } 
    } 

}