【发布时间】:2014-09-09 14:26:42
【问题描述】:
我的应用只接受纵向,MPMoviePlayerController 除外,我想允许用户更改方向。
所以,我将UINavigationController 子类化并添加了以下代码:
-(BOOL)shouldAutorotate
{
if ([[[self.viewControllers lastObject] presentedViewController] isKindOfClass:[MPMoviePlayerViewController class]])
{
return YES;
}
else
{
return NO;
}
}
效果很好,只允许我的MPMoviePlayerViewController 改变方向。问题是当用户处于横向并按下done 按钮或播放结束时,它会弹出moviePlayer 并返回到presentingViewController,但在横向模式下,会导致崩溃,因为该视图不是为横向。
我尝试了几件事来改回Portrait,但没有运气。我正在使用故事板,如果这有什么不同的话。我想在viewWillAppear 上将方向改回纵向,或者按下done 按钮并在那里更改方向。
更新:
这是我的UINavigationControllersubclass 中的更新代码:
-(BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
if ([[[self.viewControllers lastObject] presentedViewController] isKindOfClass:[MPMoviePlayerViewController class]])
{
return UIInterfaceOrientationMaskAll;
}
else
{
return UIInterfaceOrientationMaskPortrait;
}
}
现在,如果我在 Play button 的视图中按以下顺序执行操作。
- 旋转设备。 (它调用该方法但屏幕不旋转,因为它不是
MPMoviePlayerController类) - 按播放
button。 (它显示玩家已经处于横向模式)。 - 按返回按钮。 (它会弹出播放器并正确显示纵向模式的视图)
现在,如果我将顺序更改为:
- 按下播放按钮。 (将设备保持在常规纵向位置)。
- 旋转设备。 (它会旋转电影播放器以正确显示视频)。
- 按返回按钮。 (它会弹出播放器,但这一次,视图处于横向模式,这不是预期的行为)
【问题讨论】:
标签: ios objective-c iphone screen-orientation uiinterfaceorientation