3

我正在使用 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,但我应该在这些方法中调用什么来进行定位尚不清楚。

4

3 回答 3

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 的解决方案。虽然可能有一个!

于 2013-01-17T22:47:38.477 回答
0

根据您是在 ViewController 中使用 MPMoviePlayerController 还是作为单独的 ViewController 使用,答案如下:-

首先 :- 这个链接将向您解释如何将某些视图限制为纵向并允许其他视图旋转?

在该链接中,您将看到,在您所做的 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;
}

完成此操作后,它会将 AutoRotation 的功能提供给您的 ViewController。

现在这是棘手的部分,请参阅我假设您可能已将 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,考虑到您已经播放了视频,而您唯一感兴趣的是当我们单击“完成”按钮时,它应该会自动旋转到纵向。

注册通知您的 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];
}

多田!魔法完成了!试试让我知道;-)

于 2015-04-29T12:22:28.747 回答
0

我通过在“moviePlayBackDidFinish”中执行此操作解决了这个问题

  UIViewController* forcePortrait = [[UIViewController alloc] init];
  [self presentViewController:forcePortrait animated:NO completion:^{
  [forcePortrait dismissViewControllerAnimated:NO completion:nil];
  }];

它并不漂亮,但它就像一个魅力:-)

于 2014-01-09T10:38:32.823 回答