I tiene una aplicación sencilla, que contiene UITabBarController con dos UIViewControllers. Ambos UIViewControllers son solo retratos (no se permite la rotación). UIView de UIViewController contiene la vista de MPMoviePlayerController para permitir la reproducción de video dentro de esta vista con posibilidad de hacer pantalla completa a través de los controles (MPMovieControlStyleEmbedded). El código es simple y se ve como ...
__moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"MOVIE_URL"]];
__moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
__moviePlayer.view.frame = CGRectMake(10, 10, 300, 200);
__moviePlayer.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
__moviePlayer.shouldAutoplay = NO;
[__moviePlayer prepareToPlay];
[self.view addSubview:__moviePlayer.view];
... Esto funciona perfectamente usuario cambia a menos que la reproducción a pantalla completa en el que necesito para permitir la rotación para permitir la reproducción del paisaje también. La rotación no funciona, porque UITabBarController no lo permite (y ambos UIViewControllers también).
Por lo tanto, probé dos enfoques, pero ninguno de ellos funciona como se esperaba.
1) una subclase UITabBarController
lo hice añadir una propiedad BOOL __allowRotation y si se establece en Sí, lo sé SÍ La vuelta en el método de shouldAutorotateToInterfaceOrientation UITabBarController.
Estoy escuchando MPMoviePlayerDidEnterFullscreenNotification y MPMoviePlayerWillExitFullscreen notificaciones de notificación para establecer esta propiedad en YES y NO.
Funciona, pero el problema es que cuando el usuario finaliza la reproducción de video en el paisaje, la vista subyacente no se gira a la posición vertical. La única forma de volver a rotar a retrato es usar API privada, que es no.
2) Ver/transformación capa
También probamos para escuchar notificaciones MPMoviePlayerDidEnterFullscreenNotification y MPMoviePlayerWillExitFullscreenNotification.
Cuando recibo MPMoviePlayerDidEnterFullscreenNotification, comienzo las notificaciones de orientación de UIDevice para obtener la orientación del dispositivo. Estoy tratando de transformar la capa de vista de MPMoviePlayerController en función de la orientación actual del dispositivo, pero es un poco inmune, porque no hace nada. Puedo asignar lo que sea para transformar la propiedad, pero no hace nada.
No hace nada no es del todo correcto. Cuando aplico la transformación durante la rotación, puedo ver el efecto de esta transformación cuando paso de la pantalla completa a la reproducción de video incrustado.
3) UIWindow independiente
no he probado esto todavía, pero he encontrado un lugar que crea MPMoviePlayerController UIWindow separado para la reproducción a pantalla completa, que debe ser accesible a través de [[UIApplication sharedApplication] ventanas]. Esto explica por qué la transformación no se aplica durante la reproducción a pantalla completa.
Pero yo no les gusta bastante esta solución, ya que el UIWindow no puede ser identificado y que no quieren usar constantes mágicas como objectAtIndex: 1 o aplicar la transformación a todos los UIWindows excepto la principal, etc.
ladoel hecho de que la implementación subyacente se puede modificar y dejará de funcionar.
Pregunta
Por lo tanto, la pregunta es, cómo permitir la reproducción a pantalla completa MPMoviePlayerController única rotación cuando subyace UIView (es decir. De UIView UIViewController) prohíbe la rotación y permite que sólo el retrato?
Tienes razón. Estuve protagonizando el código durante tanto tiempo y esto no se me ocurrió. ¡Gracias! Funciona como se espera ahora. P.S. Pero todavía creo que debería funcionar automáticamente, porque la presentación en pantalla completa está controlada por MPMoviePlayerController. Va a completar el error del radar ... – robertvojta
Se completó como una mejora para MPMoviePlayerController Error ID # 9009914 para permitir el control de autorrotación para la reproducción a pantalla completa. – robertvojta
¿Podría compartir algún código? @Chiefly – situee