代码之家  ›  专栏  ›  技术社区  ›  Ale Morales

MPMoviePlayerViewController隐藏状态栏

  •  14
  • Ale Morales  · 技术社区  · 15 年前

    我有一个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 回复  |  直到 15 年前
        1
  •  2
  •   Simon    15 年前

    刚意识到这个问题是针对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
  •  0
  •   Sebastien Martin    15 年前

    _player = nil;
    [_player release];
    

    这些应该颠倒过来:

    [_player release];
    _player = nil;
    

    发布消息nil无效。

        3
  •  -3
  •   Mikael    15 年前

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