Evita que MPMoviePlayerController rote y cambie a vertical cuando está en pantalla completa.

En una aplicación iOS5 para iPhone 4 / 4s, tengo un UIViewController con una vista de MPMoviePlayerController agregada a su vista:

[self.view insertSubview:self.fullscreenMoviePlayerController.view atIndex:2]; 

UIViewController solo admite la orientación horizontal:

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation { // Return YES for supported orientations. return interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight; } 

esto bloquea correctamente la rotation a solo paisaje. Sin embargo, cuando configuro MPVideoPlayerController para que se muestre a pantalla completa, esto se ignora y el video ya no está restringido al outlook y gira a la orientación que tenga el teléfono.

¿Cómo puedo evitar que el video de MPMoviePlayerController gire a orientaciones verticales en pantalla completa? Es crucial que el video no gire cuando el teléfono se gira a retrato.

He intentado subclasificar MPVideoPlayerController y anular shouldAutorotateToInterfaceOrientation: pero esto no tiene efecto.

El MPMoviePlayerController es solo una parte de la vista, por lo que usar MPMoviePlayerViewCotroller no es una opción.

Esto parece ser bastante difícil si realmente quieres evitar usar MPMoviePlayerViewController. Una opción, que parece funcionar incluso si la tienes en pantalla completa, es configurar manualmente el marco de la vista de MPMoviePlayerController. (Tenga en count que en otros problemas de iOS, a veces el uso de la vista de background ha producido resultados diferentes, pero vale la pena hacerlo).

 MyMPMoviePlayerController.view.frame = CGRectMake(0, 0, your numbers, here); 

Sin embargo, Apple, en sus documentos, dice que el marco del controller debe establecerse en el marco de su vista principal.

 [MyMPMoviePlayerController.view setFrame: parentView.bounds]; 

La solución less elegante, pero que podría funcionar incluso si esa no es la siguiente:

Escuche la UIDeviceOrientationDidChangeNotification y tome la vista del reproductor de películas. Aplica una transfrom, los límites y el centro (o marco, etc.) en él para que aún se ajuste a la vista del paisaje. Esencialmente transformarlo de nuevo cada vez que intenta girar. (Todo esto supone que realmente no puede evitar que se rote con shouldAutorotateToInterfaceOrientation :).

El único problema aquí es que puede mantener la película en retrato, pero se rosque con la vista, que no es el resultado deseado.

Sí, te vi decir que usar MPMoviePlayerViewController no es una opción:

aún … ¿por qué no intentar hacer MPMoviePlayerViewController del ViewController que tiene que de lo contrario contiene el MPMoviePlayerController y los demás elementos en su controller de vista. la buena parte de esto es que MPMoviePlayerViewController ya tiene incorporado el MPMoviePlayerController. Simplemente se refiere a eso en lugar del MPMoviePlayerController que tiene en su propio viewController. que tiene el shouldAutorotateToInterfaceOrientation que puede anular y debe hacer lo correcto por usted.

Puedes preparar dos videos. Si no hay otra opción.

Por favor, visite el enlace. Esto muestra el video solo en el modo horizontal. De forma pnetworkingeterminada, lo hace http://mobiledevelopertips.com/video/getting-mpmovieplayercontroller-to-cooperate-with-ios4-3-2-ipad-and-earlier- versiones-de-iphone-sdk.html Espero que resuelva tu problema.