2010-09-15 16 views
14

Tengo una aplicación para iPad que crea y muestra un video con un MPMoviePlayerViewController. Aquí está mi código:MPMoviePlayerViewController Ocultar barra de estado

MPMoviePlayerViewController *mpvc = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:URLEncode(uri)]]; 
[mpvc setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
[mpvc setWantsFullScreenLayout:YES]; 
[<MainViewController> presentModalViewController:mpvc animated:YES]; 

carga Película/reproducción funciona bien, sin embargo, cuando aparece el controlador de la película, que muestra la barra de estado (conexión, la batería, la hora) en la parte superior, incluso cuando lo tengo desactivado en mi ventana principal.

He intentado hacer:

[mpvc setWantsFullScreenLayout:YES]; 
[[UIApplication sharedApplication] setStatusBarHidden:YES]; 

Y nada parece funcionar, sin embargo, si también puse: Barra de

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 

El estado desaparece! Pero el controlador de película aún se cambia de tamaño como si la barra de estado estuviera allí (incluso cuando ya usé -setWantsFullScreenLayout:).

¿Alguien me puede indicar una forma fácil (comprobada) de mostrar el video sin la barra de estado?

Gracias.

Respuesta

2

acabo de dar cuenta que la pregunta era IPAD-específica. Mi código era para el iPhone, pero parte de eso puede ayudarte de todos modos.

Tuve que hacer esto hace un par de días, creo que su problema es simplemente no llamar a hide en la barra de estado después de que el video comienza a reproducirse. De cualquier manera he lo probado y código con el que trabaja desde 3.0 a 4.2 probado:

- (IBAction) playIntroVideo 
{ 
    NSString *videoString = [[NSBundle mainBundle] pathForResource:@"intro" ofType:@"mp4"]; 
    NSURL *videoURL = [NSURL fileURLWithPath:videoString]; 
    _player = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; 

    if 
    (
     [_player respondsToSelector:@selector(view)] && 
     [_player respondsToSelector:@selector(setFullscreen:animated:)] && 
     [_player respondsToSelector:@selector(setControlStyle:)] 
    ) 
    { 
     [[_player view] setFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT_FULL)]; 
     [_player setFullscreen:YES animated:YES]; 
     [_player setControlStyle:MPMovieControlStyleNone]; 
     [self.view addSubview:[_player view]]; 
    } 

    [_player play]; 

    [[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(terminateVideo) 
    name:MPMoviePlayerPlaybackDidFinishNotification 
    object:nil]; 

    [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
    self.navigationController.navigationBarHidden = YES; 
} 

- (void) terminateVideo 
{ 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
    self.navigationController.navigationBarHidden = NO; 

    if ([_player respondsToSelector:@selector(view)]) 
    { 
     [[_player view] removeFromSuperview]; 
    } 

    _player = nil; 
    [_player release]; 
} 
+0

No funciona para mí. – Boon

-3

Puede establecer UIStatusBarHidden en su plist, que debe resolverlo :)

+0

UIStatusBarHidden. No, no ayuda. –

+0

Ocultar la barra de estado para toda la aplicación solo para que no aparezca mientras se reproduce una película no es una solución adecuada. –

0

La respuesta a esta pregunta tiene un error al final:

 
_player = nil; 
[_player release]; 

Estos deben ser invertida:

 
[_player release]; 
_player = nil; 

La mensajería nula con liberación no tiene ningún efecto.

Cuestiones relacionadas