我正在使用MoviePlayer控制器在我的iOS应用中播放视频。我正在使用这样的定向通知
if(deviceOrientation ==UIDeviceOrientationLandscapeLeft)
{
NSLog(@"Replay is in Landscape");
self.fullScreenFlag = YES;
[self.moviePlayer setFullscreen:YES animated:NO];
}
当用户将手机转为横向时,这使我的视频屏幕可以全屏播放。但是当我在moviePlayer控件上按下完成按钮时,我会进入下面的方法
- (void)movieWillExitFullscreen:(NSNotification*)notification
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if(deviceOrientation ==UIDeviceOrientationLandscapeLeft) {
NSLog(@"Pressed Done in Landscape");
//Problem: Here I want to force my VideoViewController to rotate back to portrait Mode
}
}
一旦用户按下完成按钮或视频停止播放,我不知道怎么能让VC回到肖像画。我知道moviePlayerNotificationMethods但我应该在这些方法中调用什么方向不明确。
答案 0 :(得分:2)
我通过为视频播放提供单独的视图控制器解决了这个问题。
所以,你会有两个视图控制器
在SomeViewController中,当你想播放电影时:
MoviePlayerViewController *vc = [[MoviePlayerViewController alloc] initWithNibName:@"MoviePlayerViewController" bundle:nil];
[vc setPathToMovie:path];
[self.navigationController pushViewController:vc animated:YES];
[vc release];
然后在你的MoviePlayerViewController
中- (void) moviePlayBackDidFinish:(NSNotification*)notification
{
[[self navigationController] popViewControllerAnimated:YES];
}
然后您可以将SomeViewController锁定为肖像,如果用户在观看视频时处于风景中,则在弹回SomeViewController时它们将返回到肖像。
我从未找到使用deviceOrientation方法和模态MPMoviePlayerController的解决方案。虽然可能有一个!
答案 1 :(得分:0)
我在“moviePlayBackDidFinish”
中解决了这个问题 UIViewController* forcePortrait = [[UIViewController alloc] init];
[self presentViewController:forcePortrait animated:NO completion:^{
[forcePortrait dismissViewControllerAnimated:NO completion:nil];
}];
它不漂亮,但它的魅力就像一个魅力:-)
答案 2 :(得分:0)
根据您是在ViewController中使用MPMoviePlayerController还是作为单独的ViewController,答案如下: -
首先: - 这个link会解释如何将某些视图限制为纵向并允许其他人旋转?
在该链接中,您将在更改后的NavigationViewController中看到: -
-(BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
它的作用是,如果孩子想要自动旋转,它会让孩子做出自己的决定。
接下来,包含MoviePlayer的ViewController应该这样做: -
-(BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
完成此操作后,它会为您的ViewController提供AutoRotation的强大功能。
现在这里是一个棘手的部分,请参阅我假设您可能已将ViewController限制为纵向,并且由于电影播放器允许您在旋转屏幕时全屏显示全屏,因此它将转为横向,现在如果你按下完成按钮它就不会变成肖像,而是会在横向自身中退出全屏。在这种情况下,你应该做的是: -
- (BOOL)shouldAutorotate
{
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if (orientation == UIInterfaceOrientationLandscapeRight || orientation == UIInterfaceOrientationLandscapeLeft) {
if ([[[self.navigationViewController.viewControllers] lastObject] class] == [MoviePlayerViewController class] ) {
return YES;
}
return NO;
}
return NO;
}
所以,它的作用是,只有当方向是横向而不是纵向时,你才应该自动旋转。
到目前为止一切顺利,接下来是MoviePlayer,考虑到你已经播放了视频,你唯一感兴趣的是当我们点击" Done"按钮它应该自动旋转到肖像。
注册您的MoviePlayer通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerWillExitFullScreen:) name:MPMoviePlayerWillExitFullscreenNotification object:_moviePlayer];
然后在选择器中:
- (void) moviePlayerWillExitFullScreen:(NSNotification*)notification{
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerWillExitFullscreenNotification object:_moviePlayer];
}
多田!魔术完成了!尝试让我知道; - )