2

我有一个应用程序,它纯粹是一个带有 5 个选项卡(视图)的选项卡栏控制器。我希望这些视图只是纵向的。但是,该应用程序确实允许播放视频剪辑,并使用 MPMoviePlayerViewController 来播放。但我无法让玩家旋转到横向!

我尝试了以下(以及许多其他事情):子类化 MPMoviePlayerViewController 并覆盖该类的 shouldAutorotateToInterfaceOrientation 方法。

允许应用程序具有横向方向,然后尝试将选项卡视图锁定为纵向(不锁定它们,允许它们进入我不想要的横向)。

我已经搜索 StackOverflow 和 Google 好几天了!任何熟悉这个问题以及如何让电影播放器​​旋转的人???

4

2 回答 2

0

尝试实现 UIViewController遏制。将要在其中显示影片的选项卡的 viewController 指定为父(或容器)viewController。

您将希望在子类中覆盖 shouldAutorotateToInterfaceOrientation 以仅允许横向,这听起来像是您已经完成的。在您的父视图控制器和 tabBarController 中,您需要确保它们将自动旋转方法转发给您的子类。您可以通过在 shouldAutorotateToInterfaceOrientation 的子类实现中放置 NSLog 来检查这一点。

然后,当您要显示视频时,将 MPMoviePlayerViewController 的子类添加到它。

当您加载电影播放器​​的子类时,请尝试在父视图控制器中执行此操作:

[self addChildViewController:self.subclassedMoviePlayerViewController];
[self.view addSubview:self.currentViewController.view];
[self.subclassedMoviePlayerViewController didMoveToParentViewController:self];

或者,如果您想为更改设置动画,您可以执行以下操作:

CGRect viewFrame=self.subclassedMoviePlayerViewController.view.frame;
CGFloat viewHeight=inputViewFrame.size.height;

CGRect newFrame=CGRectMake(0, self.view.frame.size.height, viewFrame.size.width, viewFrame.size.height);

self.subclassedMoviePlayerViewController.view.frame=newFrame;
[self addChildViewController:self.subclassedMoviePlayerViewController];

CGRect offSetRect=CGRectOffset(newFrame, 0, -inputViewHeight);

[self.view addSubview:self.subclassedMoviePlayerViewController.view];
[UIView animateWithDuration:0.2
                 animations:^{
                      self.subclassedMoviePlayerViewController.view.frame=offSetRect;
                 }
                 completion:^(BOOL finished){
                     [self.subclassedMoviePlayerViewController didMoveToParentViewController:self];
                 }];

当然,在添加之前,您必须为电影播放器​​视图控制器的子类设置视图框架。

那么当你想删除它时:

[self.subclassedMoviePlayerViewController willMoveToParentViewController:nil];
[self.subclassedMoviePlayerViewController.view removeFromSuperView];
[self.subclassedMoviePlayerViewController removeFromParentViewController];

祝你好运

于 2012-07-07T03:50:48.547 回答
0

终于解决了这个问题!

好的,所以必须在父视图控制器(在我的情况下,选项卡视图的控制器)中覆盖一个重要的方法:

-(BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
    return NO;//This must be NO to allow any child views to use their own orientation
}

然后在我子类化的 MPMoviePlayerViewController 中,将其设置为方向:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;//This allows all orientations, set it to whatever you want
}

然后我从选项卡视图控制器中呈现这样的 MPMoviePlayerViewController:

- (IBAction)buttonVideo:(id)sender {
    MovieViewController *vc = [[MovieViewController alloc] initWithContentURL:@"http://www.MY-VIDEO-URL.com"];
    [self presentMoviePlayerViewControllerAnimated:vc];  
}

还有哇啦!一个电影播放器​​,允许在纵向锁定的标签栏应用程序中的所有方向!

于 2012-07-09T21:42:10.610 回答