MPMoviePlayerController在全屏模式下停止工作//纵向// iOS 7

时间:2014-01-21 00:29:38

标签: ios objective-c mpmovieplayercontroller

在我的项目中,我使用嵌入式视图,里面有MPMoviePlayerController。

点击全屏切换后,此影片播放器停止工作 - 在全屏模式下再播放1秒,然后停止并返回内联模式。

仅在纵向模式下才会发生,仅适用于iOS 7 - 如果我以横向打开全屏模式然后旋转设备,它就可以正常工作。

我找到了原因 - 不知何故涉及导航栏。我在项目中使用ECSlidingViewController并在初始化期间设置半透明的“NO”导航栏:

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:myViewController];

navController.navigationBar.translucent = NO;

self.topViewController = navController;

如果我设置navController.navigationBar.translucent = YES;,电影播放器​​工作正常。但我必须有半透明= NO。

所以我试着玩电影播放器​​事件MPMoviePlayerWillEnterFullscreenNotification和MPMoviePlayerWillExitFullscreenNotification。 有趣的是,如果我让navBar半透明或在进入全屏模式之前隐藏它,视频播放时间会更长(大约3-4秒),但行为是相同的。

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlayerWillEnterFullScreen:)
                                                 name:MPMoviePlayerWillEnterFullscreenNotification
                                               object:nil];


-(void)moviePlayerWillEnterFullScreen:(id)sender{

    [self.navigationController setNavigationBarHidden:YES animated:NO]; 

OR
    self.navigationController.navigationBar.translucent = YES;
} 

我非常感谢您对此我能做些什么的想法。

UPD。 这个错误在iOS 7.0.4中消失了

1 个答案:

答案 0 :(得分:3)

IMP:如果你正在使用ARC我相信你需要保留外部的moviePlayer。我自己就把它分配给了一个新的房产。

我尝试了两种方式,并为我工作。

如果您将自我视图用作整个屏幕。

NSURL *url = [[NSBundle mainBundle] URLForResource:@"Robot" withExtension:@"m4v"];
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
moviePlayer.view.transform = CGAffineTransformConcat(moviePlayer.view.transform,          CGAffineTransformMakeRotation(M_PI_2));
[moviePlayer.view setFrame: self.view.bounds];
[self.view addSubview: moviePlayer.view];
[moviePlayer play];

如果不使用自我视图,您可以使用整个全屏(它不会调用全屏属性)

NSURL *url = [[NSBundle mainBundle] URLForResource:@"Robot" withExtension:@"m4v"];
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
moviePlayer.view.transform = CGAffineTransformConcat(moviePlayer.view.transform,   CGAffineTransformMakeRotation(M_PI_2));
UIWindow *backgroundWindow = [[UIApplication sharedApplication] keyWindow];
[moviePlayer.view setFrame:backgroundWindow.frame];
[backgroundWindow addSubview:moviePlayer.view];
[moviePlayer play];