MPMoviePlayerViewController 隐藏状态栏

Posted

技术标签:

【中文标题】MPMoviePlayerViewController 隐藏状态栏【英文标题】:MPMoviePlayerViewController Hide Status Bar 【发布时间】:2011-04-12 21:18:39 【问题描述】:

我有一个 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:)。

有人可以指出一种简单(经过验证)的方式来显示没有状态栏的视频吗?

谢谢。

【问题讨论】:

【参考方案1】:

刚刚意识到这个问题是特定于 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];

【讨论】:

【参考方案2】:

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

_player = 无; [_player 发布];

这些应该颠倒:

[_player 发布]; _player = 无;

使用释放消息传递 nil 无效。

【讨论】:

【参考方案3】:

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

【讨论】:

UIStatusBarHidden。不,它没有帮助。 隐藏整个应用程序的状态栏以使其在电影播放时不出现不是一个合适的解决方案。

以上是关于MPMoviePlayerViewController 隐藏状态栏的主要内容,如果未能解决你的问题,请参考以下文章