MPMoviePlayerViewController 隐藏状态栏

14

我有一个iPad应用程序,它使用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:)。

有人可以指点一下如何轻松(可行的)地显示视频而不显示状态栏吗?

谢谢。

3个回答

2

刚刚发现这个问题是针对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

这个问题的答案在结尾处有一个错误:

_player = nil;
[_player release];

应该颠倒顺序:

[_player release];
_player = nil;

使用 release 发送 nil 消息没有任何效果。


-3
你可以在plist文件中设置UIStatusBarHidden,这应该可以解决它 :)

UIStatusBarHidden. 不,这没有帮助。 - Sergey Kopanev
仅仅为了在播放电影时不显示状态栏而隐藏整个应用程序的状态栏并不是一个合适的解决方案。 - Dave Batton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接