2010-10-18 20 views
24

Desde iOS 3.2, la clase MPMoviePlayerController permite incrustar una película en la jerarquía de vista. Ahora me enfrento a este problema: creo mi vista de retrato colocando una instancia de MPMoviePlayerController. Cuando el usuario toca el botón "pantalla completa", esta vista entra en modo pantalla completa, pero la vista permanece en retrato. Cuando el usuario gira el dispositivo, la vista de película a pantalla completa no se gira automáticamente, ya que mi aplicación prohíbe la orientación de la interfaz horizontal. Para permitir la rotación automática de la vista de pantalla completa del reproductor de películas, modifiqué el controlador de mi vista aAutorizar a orientación de la interfaz: método para devolver SÍ para el paisaje si, y solo si, el reproductor de películas está en modo de pantalla completa. Esto funciona a la perfección: cuando el usuario ingresa en pantalla completa y luego gira hacia el paisaje, el reproductor gira automáticamente a horizontal y llena toda la pantalla.MPMoviePlayerController reorientación vertical a horizontal y de vuelta a vertical (iOS 4.1)

// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    //return (interfaceOrientation == UIInterfaceOrientationPortrait); 
    if(UIInterfaceOrientationIsPortrait(interfaceOrientation)) { 
     return(YES); 
    } 

    if(UIInterfaceOrientationIsLandscape(interfaceOrientation)) { 
     return([movieController isFullscreen]); 
    } 

return(NO); 
} 

Ahora surge el problema cuando toco el botón "Hecho" en la vista de pantalla completa mientras permanezco en el paisaje. La pantalla completa se cierra y lo que veo es mi vista original autorrotada: pero no quiero esta rotación automática.

Una solución parcial, pero no es aceptable, es escuchar para "MPMoviePlayerDidExitFullscreenNotification" y, si la interfaz se coloque en horizontal, la fuerza de reorientación a la utilización de la función no documentada y privada:

[[UIDevice currentDevice] setOrientation:UIDeviceOrientationPortrait] 

Estos trabajos pero no es aceptable ya que el uso de este método está prohibido.

Intenté forzar la orientación usando [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait] pero como estoy en una Barra de pestañas esto no funciona (el UITabBar sigue siendo del tamaño de Paisaje).

Gracias por su ayuda

+0

¿Has encontrado una solución? Estoy en la misma situación y no puedo encontrar una solución. – klefevre

+0

En teoría, con la nueva forma introducida en iOS6 para gestionar la orientación, este problema se puede solucionar estableciendo directamente la orientación de cada controlador de vista. Esto se puede hacer utilizando los nuevos métodos que solicitan a cada controlador de vista permisos de orientación. – viggio24

Respuesta

2

Puede utilizar un controlador de vista separado para MPMovieplayer. Usted no tiene que anular el

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

en el controlador de vista original.

si está usando MPMoviePlayerViewController, todo está listo para usted, ya que el método shouldAutorotateToInterfaceOrientation: devolverá SÍ de manera predeterminada. Se puede utilizar como una subvista o lo presenta de forma modal llamando
presentMoviePlayerViewControllerAnimated:

Cuestiones relacionadas