8

[Actualización]iPhone no puede girar película a modo de paisaje usando MPMoviePlayerViewController

Como se recomendó he cambiado todos los controladores de vista de los padres para apoyar a todas las orientaciones. La estructura de mi aplicación es la siguiente: AppDelegate> RootViewController> Videos> VideoDetails> MPMoviePlayerViewController.

El video se reproducirá en el paisaje si cambio todo para que admita todas las orientaciones. Pero apoyar todas las orientaciones no es lo que quiero y causa otros problemas. ¿Hay algún otro trabajo o algo más que pueda hacer?

Gracias

[/ actualizar]

que tienen una aplicación de iPhone basado retrato que muestra vídeos utilizando una subclase personalizada de MPMoviePlayerViewController. Cuando el usuario presiona juegan puedo crear una instancia de esta clase y lo presentan de forma modal de la siguiente manera:

- (IBAction) playPressed:(id)sender { 

NSString *filepath = [[NSBundle mainBundle] pathForResource:self.currentVideoModel.videoFileName ofType:@"m4v"]; 
NSURL *fileURL = [NSURL fileURLWithPath:filepath]; 

// MovieViewController is just a simple subclass of MPMoviePlayerViewController 
self.moviePlayerController = [[MovieViewController alloc] initWithContentURL:fileURL]; 

// full screen code. 
[self.moviePlayerController.moviePlayer setScalingMode:MPMovieScalingModeFill]; 
[self.moviePlayerController.moviePlayer setFullscreen:TRUE]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayerController]; 

[self presentMoviePlayerViewControllerAnimated:self.moviePlayerController]; 
} 

El problema es que juega muy bien en el retrato, pero cuando se enciende el iPhone con el paisaje el video todavía juega en el retrato y no paisaje :(Todos los controladores de vista de la aplicación sólo son compatibles con orientación vertical

Mi MPMoviePlayerViewController subclase sólo se anula el siguiente método para permitir cambios de orientación, pero no tiene ningún efecto:.

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

incluso he Intentó rotar el video de forma programática, pero sin ninguna suerte, siempre permanece en modo vertical.

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 

if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
    [self.view setTransform:CGAffineTransformMakeRotation(M_PI/2)]; 
    return true; 
} 
else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) { 
    [self.view setTransform:CGAffineTransformMakeRotation(M_PI * 2)]; 
    return true; 
} 
else if (toInterfaceOrientation == UIInterfaceOrientationPortrait) { 
    [self.view setTransform:CGAffineTransformIdentity]; 
    return true; 
} 
else return false; 

}

+0

El soporte de rotación es * tipo de * jerárquico. Entonces, si está presentando un controlador de reproducción de película y no le permite rotar, mi primer paso de depuración sería verificar TODOS los controles de vista que conducen a su reproductor de película para el método 'shouldAutorotate..' y hacer que' devuelva SÍ; '(puede hacer esto incrementalmente si desea ahorrar molestias más adelante).Luego, cámbielos de a uno por vez hasta retratos hasta que se bloquee en vertical, y sepa cuáles están controlando 'UIKit' cuando intente rotar el suyo. Ir desde allí – darvids0n

+0

@ darvids0n gracias. Realmente no quiero dejar que ninguna otra vista apoye algo más que el retrato, pero supongo que lo probaré y veré qué sucede. – bennythemink

+0

@ darvids0n Actualicé mi pregunta. ¿hay algo que puedas sugerir? Muchas gracias por cualquier consejo. – bennythemink

Respuesta

10

[EDIT] La solución a continuación trabajó perfectamente en iOS5, pero ya no funciona en iOS 6. Es posible que tenga algo de tiempo para analizar este problema en el futuro :([/ EDIT]

OK Lo arreglé. Todo tenía que ver con mi error de comprensión de cómo iOS notifica una aplicación de cambios de orientación. pensó que difunde cualquier cambio de orientación pero no lo hace, sigue la jerarquía de su vista y le corresponde a usted decir a cualquier controlador de vista secundario de un cambio de orientación. Esta fue mi perdición

Mi aplicación consistió en lo siguiente establecido:

ventana> RootViewController> controlador de barra de pestañas> controlador de navegación> vista controlador> MPMoviePlayerViewController

He subclasificado el controlador tabbar para que solo devuelva verdadero para el modo vertical. Lo devolví desde el controlador de vista raíz shouldAutoRotateToOrientation método. Esto aseguró que todas las vistas sean solo retratos.

Luego presenté la película modalmente usando el método presentMoviePlayerViewControllerAnimated llamado desde RootViewController. Esto llamó automáticamente el método personalizado shouldAutoRotateToOrientation de MPMoviePlayerViewController que se configuró en SÍ para paisaje y retrato :)

Cuestiones relacionadas