tomar tiene retrato plus normal modo fotos fondo con como borroso activar iphone objective-c uinavigationcontroller device-orientation

iphone - tiene - Cargar con fuerza la vista de paisaje cuando el usuario está en la vista de retrato



modo retrato iphone 8 normal (3)

En mi aplicación, estoy usando un controlador de navegación para administrar vistas. Mi página de inicio de sesión admite vistas verticales y horizontales. Cuando el usuario inició sesión, mi segunda vista es mi hogar y solo admite el modo horizontal. Lo que quiero hacer es cuando el inicio de sesión del usuario en la página de inicio de la vista vertical debería aparecer en la vista horizontal, aunque el dispositivo esté en vertical.

Entonces, lo que hice fue cambiar la orientación de la barra de estado en landscape en el método viewWillAppear la página de inicio de la siguiente manera;

-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeRight animated:NO]; UIDeviceOrientation orien = [[UIDevice currentDevice] orientation]; }

también he shouldAutorotateToInterfaceOrientation la shouldAutorotateToInterfaceOrientation siguiente manera

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; }

Mi problema es que incluso la barra de estado cambiada a horizontal mi UIViewController (inicio) permanece en modo horizontal. Cuando estoy depurando encontré que incluso si cambio la orientación de la barra de estado a horizontal, la orientación [[UIDevice currentDevice] orientation] devuelve portrait. Pasé por internet todo el día. E implemento gran cantidad de soluciones por otro, pero todo mi día perdido. ¿Puede alguien guiarme para resolver este problema?


Puedes intentar con

- (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; }

y

- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)toInterfaceOrientation { return (toInterfaceOrientation == UIInterfaceOrientationPortrait); }

o intente presentarlo como un Modal, en lugar de presionarlo.


solo tiene que gustarle:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) { return YES; } else { return NO; } }

para la clase particular que desea abrir solo paisaje

en ios6: -

-

(BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; }


Apple no quiere que fuerces la orientación del dispositivo. Hay un truco sin embargo. Lamentablemente, no tengo acceso a mi código.

1. Your app in general supports all orientations. 2. All view controllers only return their supported interface orientation in their overwrites respectivly (in supportedInterfaceOrientations). 3. All view controllers return YES in shouldAutorotateToInterfaceOrientation only for their supported orientations.

Eso está bien. Pero aún requeriría que el usuario realmente gire el dispositivo. De lo contrario, no se invocaría todo el mecanismo de cambio de orientación. Ahora, cuando desee forzar el cambio de orientación, haga lo siguiente:

4. Use setStatusBarOrientation to set the orientation before the next view controller is displayed. That alone would not do anything. Plus it would not take any effect if the next view controller is pushed. It would work fine only when the next view controller is presented modally. 5a. So if you want to present the rotated view controller modally, then do it. 5b. If you still need to push it then: 5b1. Create an empty UIViewController instance. alloc/init will do. 5b2. Present it modally 5b3. Dismiss it modally Now, the new view controller was not even visible to the user but the device - here comes the magic - is rotated now. 5c4. Next push the view controller that you want to display roated.

Y viceversa en tu camino de regreso :)

Todo lo anterior se vuelve más complicado cuando usas una barra de pestañas. ¿Usas una barra de pestañas? Logré hacer que funcione con una barra de pestañas que tuve que subclase para sobrescribir sus métodos de rotación. En una aplicación sin barra de pestañas subclasicé UIApplication (!) Pero no recuerdo si realmente era necesario o si lo hice por conveniencia (en lugar de aplicar los cambios a más de 50 controladores de visualización). Pero, en principio, lo anterior es lo que hace el truco.

PD: Aquí encontrará una respuesta más detallada junto con ejemplos de código: la presentación del controlador de navegación en modo horizontal no funciona ios 6.0