rotar rotacion quiero que para pantalla hacer gire girar gira desactivar cómo iphone objective-c screen-orientation uiwindow

rotacion - iPhone-UIWindow gira dependiendo de la orientación actual?



rotacion de pantalla iphone 7 (4)

Estoy agregando una ventana UI adicional a mi aplicación. Mi ventana principal gira correctamente, pero esta ventana adicional que he agregado no gira.

¿Cuál es la mejor manera de rotar una ventana UI según la orientación actual del dispositivo?


Necesita configurar el nuevo rootViewController de la ventana. Luego, las subvistas de la ventana girarán correctamente.

myNewWindow!.rootViewController = self

A continuación, puede cambiar los marcos en los métodos de rotación.

por ejemplo (swift en ios8)

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { customAlertView.frame = UIScreen.mainScreen().bounds }


Necesitas rodar el tuyo para UIWindow.

Escuche las notificaciones de UIApplicationDidChangeStatusBarFrameNotification y luego configure la transformación cuando cambie la barra de estado.

Puede leer la orientación actual de -[UIApplication statusBarOrientation] , y calcular la transformación de la siguiente manera:

#define DegreesToRadians(degrees) (degrees * M_PI / 180) - (CGAffineTransform)transformForOrientation:(UIInterfaceOrientation)orientation { switch (orientation) { case UIInterfaceOrientationLandscapeLeft: return CGAffineTransformMakeRotation(-DegreesToRadians(90)); case UIInterfaceOrientationLandscapeRight: return CGAffineTransformMakeRotation(DegreesToRadians(90)); case UIInterfaceOrientationPortraitUpsideDown: return CGAffineTransformMakeRotation(DegreesToRadians(180)); case UIInterfaceOrientationPortrait: default: return CGAffineTransformMakeRotation(DegreesToRadians(0)); } } - (void)statusBarDidChangeFrame:(NSNotification *)notification { UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; [self setTransform:[self transformForOrientation:orientation]]; }

Dependiendo del tamaño de su ventana, es posible que también necesite actualizar el marco.


No se que hagas nada con la ventana. Pero el controlador raíz debe responder a shouldAutorotate con un YES.


Simplemente cree un UIViewController con su propia UIView , UIView como rootViewController a su ventana y agregue toda la IU a la vista del controlador (no directamente a la ventana) y el controlador se hará cargo de todas las rotaciones por usted:

UIApplication * app = [UIApplication sharedApplication]; UIWindow * appWindow = app.delegate.window; UIWindow * newWindow = [[UIWindow alloc] initWithFrame:appWindow.frame]; UIView * newView = [[UIView alloc] initWithFrame:appWindow.frame]; UIViewController * viewctrl = [[UIViewController alloc] init]; viewctrl.view = newView; newWindow.rootViewController = viewctrl; // Now add all your UI elements to newView, not newWindow. // viewctrl takes care of all device rotations for you. [newWindow makeKeyAndVisible]; // Or just newWindow.hidden = NO if it shall not become key

Por supuesto, también se puede crear exactamente la misma configuración en el constructor de interfaces sin una sola línea de código (excepto para configurar los tamaños de marco para que ocupen toda la pantalla antes de mostrar la ventana).