播放视频时,MPMoviePlayerViewController显示效果不佳

时间:2011-10-09 20:44:25

标签: objective-c video mpmovieplayercontroller

我试图在我的应用上显示视频。该应用程序隐藏了iPhone顶部面板。玩家似乎工作正常。只有一个恼人的问题:当播放器显示视频时,它有时会显示顶部面板,有时会隐藏它。当它被隐藏时,视频播放器面板被推动一点(与之前的面板尺寸相同)。是苹果虫吗?难道我做错了什么? 这是我的代码:

- (void) showFullscreenMediaWithURL: (NSURL *) mediaURL
{
    MPMoviePlayerViewController *ctrl = [[MPMoviePlayerViewController alloc] initWithContentURL: mediaURL];
[[NSNotificationCenter defaultCenter] addObserver:self selector: @selector(playbackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:ctrl.moviePlayer];
    ctrl.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
    ctrl.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [ctrl setWantsFullScreenLayout:YES];
    [self presentMoviePlayerViewControllerAnimated:ctrl];  
    [ctrl release];
}

-(void) playbackDidFinish:(NSNotification*)aNotification
{
   NSLog(@"Finished playback");  
   MPMoviePlayerController *player = [aNotification object];
   [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification
                                              object:player];
   [player stop];
   [self dismissMoviePlayerViewControllerAnimated];
   [[captureManager session] startRunning];

}

1 个答案:

答案 0 :(得分:0)

如果通过iPhone顶部面板表示iPhone状态栏,那么解决方案应该很简单。 就在present / dismissMoviePlayerViewControllerAnimated之前添加以下内容:

// Hide Status Bar        
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
// Show Status Bar
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

更新:我可以看到您的问题。

首先,带有网络指示图标和其他信息的上方栏是status bar(没有别的)。您的问题似乎与ViewController相关,然后是MediaPlayer。换句话说,如果你试图将其他一些ViewController“推”到全屏(就像播放器一样),你会遇到完全相同的问题。

其次,正确的方式,或者我可能会说:我将首选视频控制器加载到全屏的首选方式如下:

  1. 设置全屏rootViewController,它将加载到appDelegate上的applicationDidFinishLaunchingWithOptions上。
  2. 在rootViewController init上放置你的默认viewController(你用来从appDelegate加载的那个)。确保rootViewController.view的框架正在填充屏幕。
  3. 在rootViewController上创建2条消息:LoadFullscreen:viewController和dismissFullscreen using present / dismissModelViewController。应该从这里调用setStatusBarHidden消息。
  4. 要在全屏播放播放器,请创建播放器viewController并执行[rootViewController LoadFullscreen:player];
  5. 还有其他一些方法,但一般来说,这是我推荐的最佳做法和方法。这是相对“很多代码”的实现,这就是为什么我无法帮助你使用代码片段,但总体思路相对简单。

    我希望有帮助,E.G:)