-1

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

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

- (BOOL)shouldAutorotate
{
    return YES;
}

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

但我改成return UIInterfaceOrientationPortrait中的supportedInterfaceOrientations方法。正在调用该shouldAutorotate方法,但出现以下错误:

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

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

已编辑

我使用 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
4

5 回答 5

2
- (BOOL) shouldAutorotate {
    return YES;
}

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

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

于 2013-01-12T06:44:26.317 回答
1

我知道这听起来很简单,但是在我的 iPhone 上进行测试时,我绞尽脑汁想弄清楚方向问题——我在纵向模式下设置了物理自动锁定模式——所以我没有以编程方式改变任何事情——认为这应该是故障排除步骤 1 !

于 2013-04-30T17:12:02.367 回答
1

两点:

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

  2. 您似乎担心,如果您使用正确的UIInterfaceOrientationMaskPortrait,iOS 似乎不会调用shouldAutorotate. 它可能仅shouldAutorotate在考虑了物理设备的物理方向和应用程序的当前方向与supportedInterfaceOrientations可能需要旋转的情况下调用。为什么要检查shouldAutorotate它是否断定设备已经处于可接受的方向?

有关详细信息,请参阅supportedInterfaceOrientations处理视图旋转

于 2012-12-16T15:30:02.637 回答
0

要更改方向设置,请选择菜单 Targets->Summary-> Supported Device Orientations 并进行如下更改。

如果方向的按钮是暗的,则表示您已将其选为方向之一。 在此处输入图像描述

于 2012-12-16T15:16:30.900 回答
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 中更改几乎所有支持的方向。快乐编码

编辑1:

要以某种方式旋转viewcontrollers,只需使用我在上面发布的 ios 6 代码viewcontrollers。以下是步骤:

  1. 在所有四个所在的项目级别中internfaceorientations,转到 ahean 并关闭所有内容,以便应用程序进入默认状态。

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

  3. 而不是 yes 在shouldautorotate方法中声明 no。
  4. 在第二种方法中,插入您想要的任何类型的方向。

这应该为您解决问题。快乐编码

于 2012-12-16T15:30:14.743 回答