iphone uiviewcontroller html5-video autorotate

iphone - Video autorrotativo reproducido desde HTML5<video> en UIWebView



uiviewcontroller html5-video (1)

He hecho algo muy similar. Tienes que modificar la pila UIView para forzar a la aplicación a llamar a shouldAutorotateToInterfaceOrientation cuando tocas el controlador.

En su WebViewController configurado para permitir la autorotación:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return YES; }

En el controlador principal, no permitir la autorotación:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); }

Crea y asigna un UINavigationControllerDelegate.
En el delegado, modifique temporalmente la pila UIView cuando el controlador muestre o presione:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { // Force portrait by changing the view stack to force autorotation! if ([UIDevice currentDevice].orientation != UIInterfaceOrientationPortrait) { if (![viewController isKindOfClass:[MovieWebViewController class]]) { UIWindow *window = [[UIApplication sharedApplication] keyWindow]; UIView *view = [window.subviews objectAtIndex:0]; [view removeFromSuperview]; [window insertSubview:view atIndex:0]; } }

Es una especie de hack sucio, pero funciona.

Mi aplicación, por alguna razón, solo admite la orientación vertical.
Sin embargo, en algunos casos necesito mostrar videos de un UIWebView (con etiqueta de video ) y sería bueno si el usuario puede verlo en vertical u horizontal.

El controlador está configurado de esta manera:

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

Resultado : el video se reproduce solo en modo retrato (vale, bastante esperado).

Lo intenté:
- estableciendo esto para apoyar todas las orientaciones cuando el usuario inicia un video
- cuando el video se detiene, vuelve a "solo retrato"

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { // autorotationEnabled is toggled when a video is played / stopped return autorotationEnabled ? YES : UIInterfaceOrientationIsPortrait(toInterfaceOrientation); }

Resultado : el modo paisaje está disponible (¡genial!) Pero si el usuario pulsa ''Listo'' mientras juega en paisaje, la vista previa aparecerá en modo apaisado una vez que se haya cerrado el reproductor (no tan bueno).

¿Alguien tiene una idea sobre cómo evitar que el controlador se muestre en modo apaisado cuando se retira el reproductor?
(utilizando el método privado setInterfaceOrientation de UIDevice no es una opción)