ios - bar - ¿Cómo configurar la orientación del dispositivo(UI) programáticamente?
status bar iphone (10)
Quisiera que todo en la pantalla (UI) pueda rotar desde el paisaje de izquierda a derecha o viceversa.
¿Cómo voy a hacer esto? ¿Esto es privado?
Yo sé eso
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {}
le permite decir qué orientaciones puede ser la interfaz de usuario, pero ¿hay una manera de forzar solo una a la vez?
Aclamaciones
Aunque esta no es una solución ociosa, funciona bien para mí.
- (void)viewDidLoad
{
self.view.transform = CGAffineTransformIdentity;
self.view.transform = CGAffineTransformMakeRotation((M_PI * (90) / 180.0));
self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}
Como se sugirió en un hilo relacionado, shouldAutorotateToInterfaceOrientation
desuso el shouldAutorotateToInterfaceOrientation
. Las aplicaciones más nuevas deberían aprovechar los siguientes métodos, como se describe en la Referencia de clase UIViewController de Apple, hasta que queden en desuso:
-
shouldAutorotate
-
preferredInterfaceOrientationForPresentation
; y -
attemptRotationToDeviceOrientation
.
Por lo que entiendo, es mejor usar diferentes controladores de vista para las vistas que necesitan bloquearse (es decir, tener un modo de orientación preferido) que difiera del último.
En Swift para cambiar la orientación al retrato:
UIDevice.currentDevice().setValue(UIInterfaceOrientation.Portrait.rawValue, forKey: "orientation")
Consulte: https://.com/a/24259601
En iOS [[UIDevice currentDevice] setDeviceOrientation:UIDeviceOrientationSomeOrientation]
está ausente. Pero podemos rotar una vista con barra de estado, para esto:
- (void)showAlbum {
// check current orientation
if ([[UIApplication sharedApplication] statusBarOrientation] != UIInterfaceOrientationLandscapeLeft) {
// no, the orientation is wrong, we must rotate the UI
self.navigationController.view.userInteractionEnabled = NO;
[UIView beginAnimations:@"newAlbum" context:NULL];
[UIView setAnimationDelegate:self];
// when rotation is done, we can add new views, because UI orientation is OK
[UIView setAnimationDidStopSelector:@selector(addAlbum)];
// setup status bar
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO];
// rotate main view, in this sample the view of navigation controller is the root view in main window
[self.navigationController.view setTransform: CGAffineTransformMakeRotation(M_PI / 2)];
// set size of view
[self.navigationController.view setFrame:CGRectMake(0, 0, 748, 1024)];
[UIView commitAnimations];
} else {
[self addAlbum];
}
}
Esto fue abordado por: Guntis Treulands https://.com/a/10146270/894671
//-----------------------------------
// FORCE PORTRAIT CODE
//-----------------------------------
[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationPortrait animated:NO];
//present/dismiss viewcontroller in order to activate rotating.
UIViewController *mVC = [[UIViewController alloc] init];
[self presentModalViewController:mVC animated:NO];
[self dismissModalViewControllerAnimated:NO];
He tenido éxito con esto:
if (self.interfaceOrientation != UIInterfaceOrientationPortrait) {
// http://.com/questions/181780/is-there-a-documented-way-to-set-the-iphone-orientation
// http://openradar.appspot.com/radar?id=697
// [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; // Using the following code to get around apple''s static analysis...
[[UIDevice currentDevice] performSelector:NSSelectorFromString(@"setOrientation:") withObject:(id)UIInterfaceOrientationPortrait];
}
Se llama a ese método para determinar si su interfaz debe rotar automáticamente a una rotación dada (es decir, dejar que UIKit haga el trabajo duro, en lugar de hacerlo usted manualmente).
Entonces, si quisieras que tu aplicación solo funcionara en modo horizontal, implementarías el cuerpo de ese método con:
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
Si quisiera que su UI girara automáticamente a todas las orientaciones, simplemente podría return YES;
¿Es eso lo que preguntabas?
Si presenta un controlador de vista modal que implementa -shouldAutorotateToInterfaceOrientation:
para admitir solo una orientación, toda la interfaz se -shouldAutorotateToInterfaceOrientation:
automáticamente en él. No creo que haya una manera de cambiar programáticamente la orientación de otra manera.
También esta sencilla forma funciona:
[[UIApplication sharedApplication] setStatusBarHidden:YES];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
y de vuelta:
[[UIApplication sharedApplication] setStatusBarHidden:NO];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
objc_msgSend([UIDevice currentDevice], @selector(setOrientation:), UIInterfaceOrientationLandscapeLeft );
}