我的应用程序纯粹是一个带有5个标签(视图)的标签栏控制器。我希望这些观点只是肖像。但是,该应用程序允许播放视频剪辑并使用MPMoviePlayerViewController执行此操作。但是我不能让玩家旋转到风景!
我尝试了以下内容(以及其他许多内容): 对MPMoviePlayerViewController进行子类化并覆盖该类的shouldAutorotateToInterfaceOrientation方法。
允许应用程序具有横向方向,然后尝试将选项卡视图锁定为纵向(不锁定它们,允许它们转到我不想要的横向)。
我已经在StackOverflow和Google上搜索了好几天了! 任何熟悉这个问题的人以及如何让电影播放器旋转???
答案 0 :(得分:0)
尝试实现UIViewController containment。将要显示影片的选项卡的viewController指定为父(或容器)viewController。
您需要覆盖子类中的shouldAutorotateToInterfaceOrientation以仅允许横向,这听起来就像您已经完成的那样。在父视图控制器和tabBarController中,您需要确保它们将autorotate方法转发到您的子类。您可以通过在您的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];
祝你好运
吨
答案 1 :(得分: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];
}
和WA-LA!一个允许纵向锁定,标签栏应用中的所有方向的电影播放器!