MPMoviePlayerViewController隐藏状态栏

问题描述:

我有一个iPad应用程序,它可以创建并显示带有MPMoviePlayerViewController的视频。这里是我的代码:MPMoviePlayerViewController隐藏状态栏

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

电影负载/回放工作正常,但是,影片控制器出现时,它显示在顶部状态栏(连接,电池,小时),甚至当我有它停用我的主窗口。

我试着这样做:

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

而且似乎没有任何工作,但是如果我也提出:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 

状态栏消失!但是电影控制器仍然会调整大小,就好像状态栏在那里一样(即使我已经使用了-setWantsFullScreenLayout:)。

有人能指点我一个简单的(证明)的方式来显示没有状态栏的视频?

谢谢。

刚刚意识到的问题是,iPad的特异性。我的代码是用于iPhone的,但其中一些可能会帮助你。

几天前我不得不这样做,我认为你的问题根本不是在视频开始播放后调用隐藏状态栏。无论哪种方式,我已经久经考验这里代码工作,从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

不适用于我。 – Boon 2015-11-06 21:09:39

你可以在你的plist设置UIStatusBarHidden,应该解决它:)

+0

UIStatusBarHidden。不,它没有帮助。 – 2011-06-21 13:41:18

+0

隐藏整个应用程序的状态栏,使其在电影播放时不会出现,这不是一个合适的解决方案。 – 2012-03-28 16:28:22

回答这个问题有一个最后的错误:

 
_player = nil; 
[_player release]; 

这些应该是相反的:

 
[_player release]; 
_player = nil; 

消息零释放没有效果。