2012-10-09 28 views
11

Por lo que yo sé la práctica correcta en iOS 6 es escribir un código como este para manejar auto rotación:¿Cuál es el punto de iOS 6 - (BOOL) shouldAutorotate?

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

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 

En lugar de escribir

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

Para ser honesto, creo que el pre -iOS 6 es mucho más claro: no entiendo el punto de tener 2 métodos para manejar autorrotación, especialmente porque he visto -(BOOL) shouldAutorotate que devuelve YES en todos los ejemplos. ¿Me estoy perdiendo de algo?

Respuesta

8

La nueva API permite guardar una llamada para obtener la orientación actual del dispositivo: las dos preguntas, a saber

  • Sea o no la aplicación debe auto-rotación, independientemente de la nueva orientación, y
  • Cuáles son las orientaciones que admite un dispositivo

suelen responderse estáticamente, sin realizar una llamada para verificar la orientación actual. Los ahorros se vuelven más importantes cuando una pantalla tiene múltiples vistas controladas por controladores de vista separados.

Dado que el iOS realiza una llamada a la aplicación shouldAutorotate en respuesta a un evento del acelerómetro, ya conoce la nueva orientación; si su aplicación responde 'SÍ', el iOS podría entonces verificar la orientación actual contra la lista de compatibles, y llegar a una decisión sin que su aplicación solicite la orientación actual.

En el caso improbable de que su aplicación necesite decidir sobre la rotación automática según la nueva orientación, la nueva API no es peor que la anterior, por lo que es una situación de "ganar-dibujar".

+1

en realidad es peor. UIInterfaceOrientationIsLandscape no me dice si la interfaz en retrato o retrato al revés. ¿Y qué tenemos que hacer ahora cuando necesitamos decir "Sí, rotar pero solo si quieres rotar al retrato"? Ahora no puedo comprobar 'toInterfaceOrientation' contra UIInterfaceOrientationMaskPortrait ya que no está presente en el nuevo 'shouldAutorotate'. – Indoor