我正在构建一个仅适用于主视图的应用程序(正常和颠倒)。 我在项目设置/ Plist中设置了此设置,一切正常。 但是,我有一些模态视图可以显示图像/视频,我希望它们可以旋转到所有方向。
我尝试为UINavigationController添加一个类别,但没有运气。 我还添加了viewController,调用模式下面的代码:
-(BOOL)shouldAutomaticallyForwardAppearanceMethods{
return NO;
}
-(BOOL)shouldAutomaticallyForwardRotationMethods{
return NO;
}
我已将以下代码添加到我希望允许所有方向的模态viewControllers中:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAll;
}
我错过了什么?有什么建议吗?
答案 0 :(得分:3)
在iOS 6上,旋转处理已更改。对于您描述的问题,有几种方法。首先,在plist中,启用除肖像上下颠倒的所有方向。
然后您可以使用以下解决方案之一:
您可以覆盖应用程序委托中的方法。当方向更改或按下新视图控制器时,您的代理会调用该方法,您可以使用它暂时启用/禁用应用程序的横向显示:
// In AppDelegate.h:
@property (nonatomic) BOOL portraitOnly;
// In AppDelegate.m:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
return _portraitOnly ? UIInterfaceOrientationMaskPortrait : UIInterfaceOrientationMaskAllButUpsideDown;
}
// to switch to portrait only:
((AppDelegate *)[UIApplication sharedApplication].delegate).portraitOnly = YES;
// to switch to allowing landscape orientations:
((AppDelegate *)[UIApplication sharedApplication].delegate).portraitOnly = NO;
答案 1 :(得分:1)
您需要为构建设置中层次结构中的祖先的viewControllers启用旋转(以便允许层次结构中较低的VC能够根据需要进行旋转)。然后在每个viewController中从shouldAutoRotate
,supportedInterfaceOrientations
和willAnimateRotationToInterfaceOrientation
返回正确的逻辑。
- 对于根本不移动的viewControllers,从shouldAutoRotate
返回NO。
- 同样,从shouldAutoRotate
返回YES并从supportedInterfaceOrientations
- 使用willAnimateRotationToInterfaceOrientation
进行最后一分钟清理或在新方向出现之前需要进行的数据更改。
如果您仍有问题,请随时告诉我。希望它有所帮助!