在我的视图控制器中,我实现了两种控制界面方向的方法:
- (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
答案 0 :(得分:2)
- (BOOL) shouldAutorotate {
return YES;
}
// for landscape
- (NSInteger) supportedInterfaceOrientations {
return (1 << UIInterfaceOrientationLandscapeLeft) |
(1 << UIInterfaceOrientationLandscapeRight);
}
如上所述,请查看特定方向的掩码值:UIInterfaceOrientationMask值。UIInterfaceOrientationMask
答案 1 :(得分:1)
两点:
您的错误消息非常有意义,因为使用UIInterfaceOrientationPortrait
作为supportedInterfaceOrientations
的返回值是没有意义的,它返回一个位掩码。使用其中一个UIInterfaceOrientationMask
值。
您似乎担心如果您使用正确的UIInterfaceOrientationMaskPortrait
,iOS似乎不会调用shouldAutorotate
。如果考虑到物理设备的物理方向和应用程序针对shouldAutorotate
的当前方向可能需要轮换,则可能只会调用supportedInterfaceOrientations
。为什么要检查shouldAutorotate
是否已经确定设备已经处于可接受的方向?
有关详细信息,请参阅supportedInterfaceOrientations和Handling View Rotations。
答案 2 :(得分:1)
我知道这听起来非常简单,但是在我的iPhone上进行测试的过程中,我的大脑一直在弄清楚方向问题 - 我在纵向模式下进行了物理自动锁定模式 - 所以我没有改变编程方式 - 认为这应该是故障排除第1步!
答案 3 :(得分:0)
要更改方向设置,请选择菜单Targets-&gt; Summary-&gt;支持的设备方向并更改如下。
如果方向按钮较暗,则表示您已将其选为方向之一。
答案 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
代码。以下是步骤:
在项目级别中,所有四个internfaceorientations
都位于该项目级别,然后关闭所有内容,以便应用程序进入默认状态。
实现我在所有viewcontrollers
中提供的ios 6代码。
shouldautorotate
方法中声明否。这应该为你做的伎俩。快乐的编码