tiene - modo retrato iphone 8 plus camara frontal
Las cargas de UIViewController giran al paisaje pero solo admiten el retrato (4)
¿Hay alguna manera de cargar un retrato que solo vea el controlador en orientación vertical aunque el controlador de vista principal (y el teléfono) esté en orientación horizontal?
Este UIViewController en particular solo se ajusta al modo Retrato (es un selector de color), por lo que el código en shouldAutorotateToInterfaceOrientation: devuelve YES solo para orientaciones de retrato. Eso funciona bien si enciende el teléfono mientras la vista ya está cargada, permanece en vertical, pero no ayuda si el teléfono ya está en horizontal cuando se carga el NIB de la vista.
Cuando la pantalla ya está en orientación horizontal cuando ViewController está cargado, la vista está en disposición vertical y la mitad inferior de la vista está cortada. Intenté crear un diseño de paisaje, pero el control segmentado es un problema.
EDITAR - He intentado usar setStatusBarOrientation en viewWillAppear, pero solo afecta a la barra de estado, la barra de navegación y la vista todavía están giradas para el paisaje.
Esto sucede con 3.1.3 y 4.0 en el iPhone.
En circunstancias normales, al mostrar un nuevo UIViewController
, debería rotar automáticamente a vertical si solo admite el retrato y la aplicación se encuentra actualmente en horizontal. Esto solo se aplica a las versiones más nuevas del sistema operativo (pero supongo que probablemente se esté ejecutando en 3.1.3).
En cualquier caso, para forzar la aplicación en el retrato:
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:YES];
Creo que no es posible enviar un controlador de vista vertical al controlador de navegación que ya está en modo horizontal.
Intenta imaginar su animación (la barra de navegación) ...
Le sugiero que agregue un modo de paisaje para su selector de color.
Otra solución podría ser rotar toda la vista al ingresar al selector de color en modo horizontal.
Puede tomar la orientación actual con la orientación de [[UIDevice currentDevice] orientation]
.
Si funciona para su aplicación, podría considerar usar un controlador de vista modal en su lugar. El IIRC que presenta un controlador de vista modal maneja la rotación correctamente.
En este ejemplo, quiero que la vista se inicie en modo horizontal, incluso si se presionó desde el modo vertical.
@implementation MyController
-(void)willAnimateSecondHalfOfRotationFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
duration:(NSTimeInterval)duration {
[self.view setNeedsLayout];
}
@end
@implementation MyView
-(void)layoutSubviews {
// Set subview frames here
switch ([UIDevice currentDevice].orientation) {
case UIDeviceOrientationUnknown:
case UIDeviceOrientationPortrait:
case UIDeviceOrientationPortraitUpsideDown:
case UIDeviceOrientationFaceUp:
case UIDeviceOrientationFaceDown:
self.transform = CGAffineTransformMakeRotation(M_PI/2.0);
self.transform = CGAffineTransformTranslate(self.transform, -80.0f, 80.0f);
break;
case UIDeviceOrientationLandscapeLeft:
case UIDeviceOrientationLandscapeRight:
self.transform = CGAffineTransformIdentity;
break;
}
}
@end