2012-10-09 10 views
11

Per quanto ne so la pratica corretta su iOS 6 è quello di scrivere un codice come questo per gestire autorotazione:Qual è il punto di iOS 6 - (BOOL) shouldAutorotate?

// iOS 6 
- (BOOL)shouldAutorotate { 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 

Invece di scrivere

// pre-iOS 6 support 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    BOOL retVal = UIInterfaceOrientationIsLandscape(toInterfaceOrientation); 
    return retVal; 
} 

Per essere onesto, penso che la pre -iOS 6 è molto più chiaro: non capisco il punto di avere 2 metodi per gestire l'autorotazione, specialmente perché ho visto restituendo YES in tutti gli esempi. Mi sto perdendo qualcosa?

risposta

8

La nuova API consente di salvare una chiamata per ottenere la corrente orientamento del dispositivo: le due questioni, vale a dire

  • o meno l'applicazione dovrebbe rotazione automatica, a prescindere dal nuovo orientamento, e
  • Quali sono gli orientamenti supportati da un dispositivo

vengono spesso risposte in modo statico, senza effettuare una chiamata per verificare l'orientamento corrente. I risparmi diventano più importanti quando una schermata ha più viste controllate da controllori di vista separati.

Poiché iOS sta effettuando una chiamata nell'app shouldAutorotate in risposta a un evento dell'accelerometro, conosce già il nuovo orientamento; se la tua app risponde "SÌ", l'iOS potrebbe quindi verificare l'orientamento corrente rispetto all'elenco di quelli supportati e prendere una decisione senza che l'app esegua una query sull'orientamento corrente.

Nel caso improbabile che l'app debba decidere l'auto-rotazione in base al nuovo orientamento, la nuova API non è peggiore di quella precedente, quindi è una situazione di "vincita".

+1

in realtà è peggio. UIInterfaceOrientationIsLandscape non mi dice se l'interfaccia in verticale o verticale è capovolta. E cosa dobbiamo fare ora quando dobbiamo dire "Sì, ruota ma solo se vuoi ruotare in verticale"? Non riesco ora a selezionare 'toInterfaceOrientation' su UIInterfaceOrientationMaskPortrait poiché non è presente nel nuovo 'shouldAutorotate'. – Indoor