[Pregunta actualizada]¿Cuál es la forma correcta de detectar la orientación de la interfaz en el lanzamiento?
Así que aquí está el problema, finalmente lo reduje a esto. Si crea un nuevo UIViewController en todos los métodos
- (id)init;
- (void)loadView;
- (void)viewDidAppear:(BOOL)animated;
- (void)viewDidLoad;
(...)
El interfaceOrientation estándar es de retrato y si se detecta el modo horizontal girará rápidamente a esa orientación. Que luego puede ser detectado mediante el:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
El problema es que en el IPAD, es tranquilo difícil preparar su interfaz para la orientación actual de la interfaz dentro de la loadView (o uno de los otros), ya que sólo devolverá Retrato. Esto causará algunos problemas:
1) Quiero que mi contenido se vuelva a cargar en modo retrato, pero NO en modo paisaje. Normalmente colocaría una declaración if en loadView. Si está en modo vertical, vuelva a cargar el contenido. Pero en este caso, siempre devolverá el retrato y, por lo tanto, siempre carga el contenido.
2) Quiero utilizar 'presentPopoverFromRect: inView: allowedArrowDirections: animado:' - método cuando está en modo retrato, por lo que presentará el menú de popover automáticamente cuando se inicie la aplicación. Esto bloqueará la aplicación cuando se lance en modo vertical. Motivo: 'Popovers no pueden presentarse desde una vista que no tiene ventana'.
La única suposición segura está en 'didRotateFromInterfaceOrientation: (UIInterfaceOrientation) fromInterfaceOrientation', pero este método no se activará si se inicia en modo vertical.
// ----
Update (15.37)
'UIApplicationWillChangeStatusBarOrientationNotification'
únicamente se publicará cuando los usuarios permutas de vertical a horizontal (o viceversa vica). Si la interfaz era el problema, entonces esto puede ser fácilmente resuelto con la observación de que la notificación y
if (UIDeviceOrientationIsPortrait(interfaceOrientation)) {
// layout subviews for portrait mode
} else {
// layout subviews for landscape mode
}
Pero el problema es que yo quiero saber en qué modo es el momento del lanzamiento para determinar en lugar debo o no recargar el contenido No puedo volver a cargar el contenido y cuando lo canjeo a un paisaje, cancélelo.
He intentado hacer el cheque para 'UIDeviceOrientationIsPortrait()' 'en layoutSubviews' de una costumbre' subclase UIView' y me estoy poniendo las orientaciones correctas. ¿Tiene algún otro código que podría compartir que podría ayudar a identificar cuál es el problema? ¿También se pregunta si los valores de UIDeviceOrientation y UIInterfaceOrientation se pueden usar indistintamente? Eso me tiene atrapado con errores extraños antes. – justinkmunger