iphone - biblicas - las 7 dispensaciones ilustradas
Tamaño de fotograma/ventana "incorrecto" después de la reorientación en iPhone (3)
He estado tropezando con el mismo problema y con un poco de trabajo de diagnóstico descubrí que los límites y el marco de la vista no reflejan con precisión la orientación horizontal en viewDidLoad
(cuando el dispositivo se mantiene en horizontal cuando el controlador de vista se inserta en la pila), pero hazlo correctamente en viewWillAppear:
y viewDidAppear:
Acabo de mover mi código que necesitaba las dimensiones del marco / límites de viewDidLoad
para viewWillAppear:
y funcionó correctamente.
En mi aplicación de iPhone OS, quiero (necesito) mirar los cambios en la orientación del dispositivo para reorganizar ciertas partes de la pantalla. El enfoque que utilicé fue usar CGRect frame = [UIScreen mainScreen].applicationFrame
para obtener el tamaño de la pantalla, y desde allí calcular el tamaño y / o posicionamiento de otros controles (también probé self.view.frame
).
Todas las pruebas se realizaron hasta el momento en el modo vertical, por lo que pude centrarme en programar las funciones principales y luego hacer algunos ajustes para Landscape. Y aquí ingresa el problema: In -(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
algunos registros para verificar los tamaños antes de continuar, pero aparentemente los valores de Ancho y Alto son "incorrectos" (digo "incorrecto" porque al principio vistazo a los valores no tiene sentido para mí).
Aquí está el resultado de algunos registros:
- Rotación: Horizontal [w = 300.000000, h = 480.000000]
- Rotación: Retrato [w = 320.000000, h = 460.000000]
Los valores para "w" y "h" en Landscape parecen invertidos para mí, esperaba w = 480 yh = 300.
¿Qué estoy haciendo mal? El código que utilicé para depurar está debajo.
-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
CGRect frame = [UIScreen mainScreen].applicationFrame;
CGSize size = frame.size;
NSLog(@"%@", [NSString stringWithFormat:@"Rotation: %s [w=%f, h=%f]",
UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? "Portrait" : "Landscape",
size.width, size.height]);
}
La orientación de su dispositivo cambió, no las características físicas de la pantalla. Básicamente lo inclinas hacia un lado, pero en realidad tiene 320 píxeles de ancho (20 de los cuales no están disponibles en este momento desde que se muestra la barra de estado) y 480 píxeles de alto. Si su vista gira automáticamente, entonces el ancho / alto ha sido traducido para usted, pero cuando solicita las dimensiones reales de la pantalla, recupera las dimensiones reales de la pantalla.
Esta es también la razón por la cual, cuando se trabaja con vistas traducidas, es importante hacer cálculos basados en el centro de la vista y los límites de la vista y nunca en el marco de la vista.
Use self.view.bounds
en self.view.bounds
lugar.