iOS 6 supportedInterfaceOrientations问题

时间:2012-12-16 14:56:04

标签: objective-c ios cocoa-touch orientation

在我的视图控制器中,我实现了两种控制界面方向的方法:

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

- (BOOL)shouldAutorotate
{
    return YES;
}

supportedInterfaceOrientations方法中,我返回UIInterfaceOrientationMaskPortrait但当时我意识到shouldAutorotate方法没有被调用。

但我在return UIInterfaceOrientationPortrait方法中更改为supportedInterfaceOrientations。正在调用shouldAutorotate方法,但在以下内容中提到了错误:

  

UIApplicationInvalidInterfaceOrientation,原因:'支持的方向与应用程序没有共同的方向,而且应该是返回YES'

顺便说一下,我选择了支持的界面方向中的所有方向。

EDITED

我使用viewController并使用navigationController嵌入。 这是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

5 个答案:

答案 0 :(得分:2)

- (BOOL) shouldAutorotate {
    return YES;
}

// for landscape
- (NSInteger) supportedInterfaceOrientations {
    return (1 << UIInterfaceOrientationLandscapeLeft) | 
           (1 << UIInterfaceOrientationLandscapeRight);
}

如上所述,请查看特定方向的掩码值:UIInterfaceOrientationMask值。UIInterfaceOrientationMask

答案 1 :(得分:1)

两点:

  1. 您的错误消息非常有意义,因为使用UIInterfaceOrientationPortrait作为supportedInterfaceOrientations的返回值是没有意义的,它返回一个位掩码。使用其中一个UIInterfaceOrientationMask值。

  2. 您似乎担心如果您使用正确的UIInterfaceOrientationMaskPortrait,iOS似乎不会调用shouldAutorotate。如果考虑到物理设备的物理方向和应用程序针对shouldAutorotate的当前方向可能需要轮换,则可能只会调用supportedInterfaceOrientations。为什么要检查shouldAutorotate是否已经确定设备已经处于可接受的方向?

  3. 有关详细信息,请参阅supportedInterfaceOrientationsHandling View Rotations

答案 2 :(得分:1)

我知道这听起来非常简单,但是在我的iPhone上进行测试的过程中,我的大脑一直在弄清楚方向问题 - 我在纵向模式下进行了物理自动锁定模式 - 所以我没有改变编程方式 - 认为这应该是故障排除第1步!

答案 3 :(得分:0)

要更改方向设置,请选择菜单Targets-&gt; Summary-&gt;支持的设备方向并更改如下。

如果方向按钮较暗,则表示您已将其选为方向之一。 enter image description here

答案 4 :(得分:0)

而不是使用整数来声明方向,为什么不使用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. happy编码中改变所有支持的方向

编辑1:

要以某种方式仅旋转某个viewcontrollers,只需使用我在上面{i}中列出的所有viewcontrollers代码。以下是步骤:

  1. 在项目级别中,所有四个internfaceorientations都位于该项目级别,然后关闭所有内容,以便应用程序进入默认状态。

  2. 实现我在所有viewcontrollers中提供的ios 6代码。

  3. 而不是在shouldautorotate方法中声明否。
  4. 在第二种方法中,插入您想要的任何类型的方向。
  5. 这应该为你做的伎俩。快乐的编码