2010-09-15 8 views
14

J'ai une application iPad qui crée et affiche une vidéo avec un MPMoviePlayerViewController. Voici mon code:MPMoviePlayerViewController Masquer la barre d'état

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

charge/lecture du film fonctionne très bien, cependant, lorsque le contrôleur vidéo apparaît, il montre la barre d'état (connexion, batterie, heure) en haut, même quand je l'ai désactivé sur mon fenêtre principale.

J'ai essayé de le faire:

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

Et rien ne semble fonctionner, si je mets aussi:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 

La barre d'état disparaît! Mais le Movie Controller est toujours redimensionné comme si la barre d'état était là (même si j'avais déjà utilisé -setWantsFullScreenLayout:). Est-ce que quelqu'un peut me diriger vers un moyen facile (éprouvé) d'afficher la vidéo sans la barre d'état?

Merci.

Répondre

2

Juste pris conscience de la question était iPad spécifique. Mon code était pour l'iPhone, mais certains d'entre eux peuvent vous aider de toute façon.

Je devais le faire il y a quelques jours, je pense que votre problème n'est tout simplement pas d'appeler hide dans la barre d'état après le début de la lecture de la vidéo. De toute façon j'ai le essayé et le code testé ici qui fonctionne de 3,0 à 4,2:

- (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

Ne fonctionne pas pour moi. – Boon

-3

Vous pouvez définir UIStatusBarHidden dans votre plist, qui devrait le résoudre :)

+0

UIStatusBarHidden. Non, ça n'aide pas. –

+0

Le fait de masquer la barre d'état de l'application entière pour qu'elle n'apparaisse pas pendant la lecture d'un film n'est pas une solution appropriée. –

0

La réponse à cette question a une erreur à la fin:

 
_player = nil; 
[_player release]; 

Ces doivent être inversées:

La messagerie nil avec libération n'a aucun effet.
 
[_player release]; 
_player = nil; 

Questions connexes