在一个应用程序中,我保持旋转,应该在纵向和纵向倒置模式下进行。 (在摘要面板中启用所有旋转。)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return interfaceOrientation==UIInterfaceOrientationPortrait || interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown;
}
或
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
无论我尝试什么,我都无法通过旋转来确定i ios 6
到目前为止我尝试过的事情:
-(NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;
}
-(NSInteger)supportedInterfaceOrientations{
NSInteger mask = 0;
if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationLandscapeRight])
mask |= UIInterfaceOrientationMaskLandscapeRight;
if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationLandscapeLeft])
mask |= UIInterfaceOrientationMaskLandscapeLeft;
if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationPortrait])
mask |= UIInterfaceOrientationMaskPortrait;
if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationPortraitUpsideDown])
mask |= UIInterfaceOrientationMaskPortraitUpsideDown;
return mask;
}
我试过把它放在我的appdelegate中:
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
return UIInterfaceOrientationMaskPortraitUpsideDown;
}
但是我收到了这个错误:由于未捕获的异常'UIApplicationInvalidInterfaceOrientation'而终止应用程序,原因是:'支持的方向与应用程序没有共同的方向,并且shouldAutorotate返回YES'
试着把它放在我的代表中:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
NSUInteger orientations = UIInterfaceOrientationMaskAll;
if (self.window.rootViewController) {
UIViewController* presented = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
orientations = [presented supportedInterfaceOrientations];
}
return orientations;
}
我阅读了有关它的所有讨论以及对shouldAutorotateToInterfaceOrientation的弃用,但我仍然无法使其工作。
我即将失去它
答案 0 :(得分:2)
来自Apple的iOS 6 SDK发行说明:
iOS 6中的自动旋转正在发生变化。在iOS 6中,不推荐
shouldAutorotateToInterfaceOrientation:
UIViewController
方法。取而代之的是,您应该使用supportedInterfaceOrientationsForWindow:
和shouldAutorotate
方法。更多责任转移到应用和应用代表。现在,iOS容器(例如
UINavigationController
)不会咨询他们的孩子以确定他们是否应该自动旋转。默认情况下,应用程序和视图控制器支持的界面方向对于iPad惯用语设置为UIInterfaceOrientationMaskAll
,对于iPhone惯用语设置为UIInterfaceOrientationMaskAllButUpsideDown
。视图控制器支持的界面方向可能会随着时间的推移而变化 - 即使应用程序支持的界面方向也会随着时间的推移而变化。无论何时设备旋转或每当视图控制器呈现全屏模态呈现样式时,系统都要求最顶层的全屏视图控制器(通常是根视图控制器)获得其支持的界面方向。此外,仅当此视图控制器从其
YES
方法返回shouldAutorotate
时,才会检索支持的方向。系统将视图控制器支持的方向与应用程序支持的方向(由Info.plist文件或应用程序代理的application:supportedInterfaceOrientationsForWindow:
方法确定)相交,以确定是否旋转。系统通过将应用程序的supportedInterfaceOrientationsForWindow:方法返回的值与最顶层全屏控制器的supportedInterfaceOrientations方法返回的值相交来确定是否支持方向。 setStatusBarOrientation:animated:方法不会被完全弃用。现在,只有当最顶层的全屏视图控制器的supportedInterfaceOrientations方法返回0时,它才有效。这使得调用者负责确保状态栏方向一致。
为了兼容性,仍然实现
shouldAutorotateToInterfaceOrientation:
方法的视图控制器不会获得新的自动旋转行为。 (换句话说,他们不会回退到使用app,app delegate或Info.plist文件来确定支持的方向。)相反,shouldAutorotateToInterfaceOrientation:
方法用于合成将返回的信息。supportedInterfaceOrientations
方法。
如果您希望整个应用程序旋转,那么您应该设置Info.plist以支持所有方向。现在,如果您希望特定视图仅为纵向,则必须执行某种子类并覆盖自动旋转方法以仅返回纵向。只需查看How to force a UIViewController to Portrait orientation in iOS 6
即可答案 1 :(得分:1)
我的应用程序是从IOS 5开始的。我使用了IOS 5设备的shouldAutorotateToInterfaceOrientation方法(默认情况下)。和类别UINavigationController(在我的应用程序中全部用于自定义。)来处理IOS 6的方向。
#import "UINavigationController+Rotation_IOS6.h"
@implementation UINavigationController (Rotation_IOS6)
-(BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
if([self.visibleViewController isMemberOfClass:NSClassFromString(@"SampleViewController")])
{
return UIInterfaceOrientationMaskLandscape | UIInterfaceOrientationMaskPortraitUpsideDown | UIInterfaceOrientationMaskPortrait;
}
return UIInterfaceOrientationPortrait;
}
@end
答案 2 :(得分:0)
检查目标属性......如下所示
答案 3 :(得分:0)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
return YES;
}