iOS 6 supportedInterfaceOrientations问题
在我的视图控制器中,我实现了两种控制界面方向的方法:
- (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } - (BOOL)shouldAutorotate { return YES; }
在supportedInterfaceOrientations
方法中,我返回UIInterfaceOrientationMaskPortrait
但是当时我意识到shouldAutorotate
方法没有被调用。
但是我更改为在supportedInterfaceOrientations
方法中return UIInterfaceOrientationPortrait
。 正在调用shouldAutorotate
方法,但是在shouldAutorotate
了一个错误:
UIApplicationInvalidInterfaceOrientation
,原因:“支持的方向与应用程序没有共同的方向,并且shouldAutorotate返回YES”
顺便说一下,我select支持的界面方向中的所有方向。
EDITED
我使用viewController和embeddednavigationController。 这里是AppDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate,UINavigationControllerDelegate> @property (strong, nonatomic) UIWindow *window; @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; @property (readonly, strong, nonatomic) UINavigationController *navController; - (void)saveContext; - (NSURL *)applicationDocumentsDirectory; @end
在AppDelegate.m下的didFinishLaunchingWithOptions方法中
navController = (UINavigationController *)self.window.rootViewController; IPad_HomeViewController *rootVC=(IPad_HomeViewController *)navController.topViewController; rootVC.managedObjectContext = self.managedObjectContext; return YES;
在我的IPad_HomeViewController中,
@interface IPad_HomeViewController : UIViewController <UINavigationControllerDelegate> @property (strong, nonatomic) NSManagedObjectContext *managedObjectContext; @end
- (BOOL) shouldAutorotate { return YES; } // for landscape - (NSInteger) supportedInterfaceOrientations { return (1 << UIInterfaceOrientationLandscapeLeft) | (1 << UIInterfaceOrientationLandscapeRight); }
如上所述,请查看特定方向的掩码值:UIInterfaceOrientationMask值。 UIInterfaceOrientationMask
两点:
-
你的错误信息是完全有道理的,因为使用
UIInterfaceOrientationPortrait
作为来自supportedInterfaceOrientations
的返回值是没有意义的,它返回一个位掩码。 使用UIInterfaceOrientationMask
值之一。 -
您似乎担心,如果您使用正确的
UIInterfaceOrientationMaskPortrait
,那么iOS似乎不会调用shouldAutorotate
。 如果考虑到物理设备的物理方向以及应用程序当前的方向(即supportedInterfaceOrientations
方向),则可能只需要调用shouldAutorotate
。 为什么它应该检查是否应该在设备已经处于可接受的状态?
有关更多信息,请参阅supportedInterfaceOrientations和Handling View旋转 。
我知道这听起来很基本,但是当我在iPhone上进行testing的时候,我正在绞尽脑汁找出方向问题 – 我在肖像模式下使用了物理自动locking模式 – 所以没有任何我改变的程序重要 – 认为这应该是故障排除步骤1 !
要更改方向设置,请select菜单“目标” – >“摘要” – >“支持的设备方向”,然后更改如下。
如果方向的button是黑暗的,那么这意味着你已经select了它作为一个方向。
而不是使用整数来声明方向,为什么不使用bool并在那里插入if语句来检测所需的方向。 这里是一个示例代码,我希望能帮助你:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { if (interfaceOrientation == UIInterfaceOrientationPortrait) { return YES; } if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) { return YES; } return NO; }
你可以在if语句中添加所有的方向,它应该工作得很好。 阿德里安
编辑:
如果你想有一个iOS 6的选项,下面的代码应该适合你。
- (BOOL) shouldAutorotate { return YES; } -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown; }
你可以改变所有支持的方向与这个在iOS 6.愉快的编码
编辑1:
要以某种方式只旋转某些viewcontrollers
,只需使用我在上面发布的所有viewcontrollers
的ios 6代码。 这里是步骤:
-
在所有四个国际
internfaceorientations
所在的项目层面,internfaceorientations
所有的东西,关掉所有的东西,这样应用程序就会默认。 -
实现我在所有
viewcontrollers
提供的ios 6代码。 - 而不是在
shouldautorotate
方法中宣布。 - 在第二种方法中,插入任何你想要的方向。
这应该为你做的伎俩。 快乐的编码