2010-06-18 4 views
6

A un certo punto della mia applicazione, vorrei disattivare temporaneamente la funzione di rotazione - "bloccare" in modo efficace l'orientamento nel codice, simile a quello che l'interruttore di blocco fa sull'iPad in hardware.Come bloccare temporaneamente l'orientamento dell'iPad/iPhone

Attualmente sto facendo:

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications] 

e quando avrò finito, mi chiama:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications] 

Anche se questo sembra tutti a lavorare, la documentazione API indica che ci dovrebbe essere sempre un iniziare seguito da un fine - e lo sto facendo essenzialmente al contrario. Esiste un'API più appropriata per gestire l'orientamento del blocco?

risposta

10

Penso che sia semplice come non rispondere ai cambiamenti di orientamento dal controller. È possibile restituire condizionalmente true o false a seconda dei parametri che vengono passati, non è sempre necessario restituire true.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    if (rand()%2 == 0) { // evaluate if I should allow rotate 
     return YES; 
    } else { 
     return NO; 
    } 
} 
+0

Grazie - funziona alla grande! – Eric

+0

Questo è ciò che sto facendo ora, ma c'è un limite: Ad esempio If I ** 0. ** Il dispositivo e il controller di visualizzazione sono in modalità verticale. ** 1. ** ruotare il dispositivo su (diciamo) paesaggio (anche il controller della vista ruota), ** 2. ** rotazione del blocco. ** 3. ** Ruota il dispositivo in verticale (il controller della vista non ruota in questo caso, che va bene). ** 4. ** quindi sblocca la rotazione, quindi UIViewController non si aggiorna in verticale. Devo ruotarlo di nuovo per ottenere sopra il metodo chiamato :( – nacho4d

+0

In questo caso basta ascoltare la gravità dell'accelerometro e regolarsi di conseguenza – slf