根据您是在 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];
}
多田!魔法完成了!试试让我知道;-)