iphone - rotacion - Forzar la orientación vertical mientras se empuja desde el controlador de vista horizontal
rotar pantalla iphone 6 (2)
Soporte de aplicaciones: iOS6 +
Mi aplicación funciona tanto en retrato como en paisaje. Pero 1 controlador solo debería funcionar en un retrato.
El problema es que cuando estoy en horizontal y pulso el controlador de vista, el nuevo controlador de vista también está en horizontal hasta que lo gire a vertical. Entonces está atascado en el retrato como debería ser.
¿Es posible que siempre aparezca en retrato? ¿Incluso si su padre lo está empujando en el paisaje?
Todo el siguiente código no ayuda
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
Y este código funciona hasta y, a menos que no esté presionando desde el paisaje. Cómo forzar un UIViewController a la orientación vertical en iOS 6
Primero, necesitas crear una categoría:
UINavigationController + Rotation_IOS6.h
#import <UIKit/UIKit.h>
@interface UINavigationController (Rotation_IOS6)
@end
UINavigationController + Rotation_IOS6.m:
#import "UINavigationController+Rotation_IOS6.h"
@implementation UINavigationController (Rotation_IOS6)
-(BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
@end
Luego, implementas estos métodos en tu clase que quieres que sean solo panorámicos:
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
En caso de que esté utilizando un UITabBarController, simplemente reemplace el UINavigationController para UITabBarController. ¡Esta solución funcionó bien para mí después de una larga búsqueda! ¡Estaba en la misma situación que tú ahora!
EDITAR
Entonces, vi tu muestra. Necesitas hacer algunos cambios. 1 - Crear una nueva clase para la categoría UINavigationController. Nombre la clase UINavigationController + Rotation_IOS6 (.hy .m) 2 - No necesita implementar el método preferredInterfaceOrientationForPresentation
. Tu categoría debería verse así:
#import "UINavigationController+Rotation_IOS6.h"
@implementation UINavigationController (Rotation_IOS6)
-(BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
@end
3 - En la clase que desea rotar solo en horizontal, incluya esto en la implementación, exactamente como esto:
// Rotation methods for iOS 6
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
4 - Le aconsejaría que incluya también el método de autorrotación para iOS 5 dentro de la clase que desee en horizontal:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
}
Resolví esto agregando las siguientes líneas en ViewDidLoad
UIViewController *c = [[UIViewController alloc]init];
[self presentViewController:c animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];