2012-06-04 14 views
5

Mi piacerebbe essere in grado di gestire i cambiamenti di orientamento nella mia attuale applicazione iPhone. Il problema è che non voglio che la vista del mio controller ruoti o ridimensioni. Quando l'orientamento del dispositivo cambia, voglio solo un elemento dell'interfaccia utente per ruotare di 90 gradi sullo schermo.Quando un dispositivo iOS ruota, come posso cambiare l'orientamento di un solo elemento?

L'applicazione per fotocamera Apple è un perfetto esempio di questo: quando l'orientamento del dispositivo cambia, tutti i pulsanti ruotano, ma la vista stessa non ruota.

Suppongo che potrei semplicemente ridimensionare la vista, spostare tutti i miei elementi in giro e quindi animare i pulsanti, ma sento che ci deve essere un modo più semplice per farlo.

Grazie in anticipo.

risposta

5

1) È possibile creare 2 Visualizza le gerarchie e il cambiamento che è sullo schermo in willRotateToInterfaceOrientation: see this question

2) Oppure puoi gestire tu stesso tutte le rotazioni see this question

+1

L'opzione 2 era perfetta.Grazie per avermi indicato nella giusta direzione. Ho avuto difficoltà a trovarlo per qualche motivo. Apprezzo il tuo post e il codice di esempio. Eccezionale!! – tnbeatty

+0

@tnbeatty Ho apportato una modifica alla risposta di riferimento, perché ha gestito alcuni valori di UIDeviceOrientation in modo errato – Jiri

2

È possibile utilizzare

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    { 
if(interfaceOrientation==UIInterfaceOrientationPortrait || interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown) 
    { 
     //Change frames as per orientations 
    } 

    else 
    {  
      //Change frames as per orientations 
    } 


    return NO; 
    } 

e in base all'orientamento impostati manualmente le cornici degli elementi dell'interfaccia utente che si desidera modificare. è possibile accedere a tutti gli orientamenti dalla sezione Constants di this doc.

MODIFICA: È possibile utilizzare NSNotification per il problema.

UIApplicationDidChangeStatusBarOrientationNotification 

Inviato quando l'orientamento dell'interfaccia utente dell'applicazione modifiche.

Il dizionario userInfo contiene un oggetto che incapsula NSNumber un valore UIInterfaceOrientation (vedi UIInterfaceOrientation). Utilizzare UIApplicationStatusBarOrientationUserInfoKey per accedere a questo valore Disponibilità

Available in iOS 2.0 and later. 

dichiarata in UIApplication.h

+0

Questo è un buon pensiero - questo è quello che ho provato prima. Il problema è: supponiamo che il dispositivo si avvii in UIInterfaceOrientationPortrait. Se l'utente trasforma il dispositivo in UIInterfaceOrientationLandscapeLeft, è possibile rilevare tale modifica e quindi modificare i frame. Se l'utente torna a UIInterfaceOrientationPortrait, questo metodo non verrà chiamato. – tnbeatty

+0

Questo è interessante, nella mia esperienza, questa routine viene chiamata ogni rotazione (vera) che accade. – trumpetlicks

+1

Dovrei chiarire: nel mio commento precedente, -shouldAutorotateToInterfaceOrientation non verrà chiamato perché l'orientamento del dispositivo non viene mai effettivamente modificato. Pertanto, il telefono pensa che sia in verticale e non chiamerà questo metodo quando il dispositivo torna in verticale. Ha senso? – tnbeatty

Problemi correlati