应用程序在ios 7中更改方向时崩溃

时间:2017-05-02 11:55:16

标签: ios objective-c orientation

我正在使用基本上以横向模式运行的游戏。 它可以选择更改Profile Pic。 配置文件pic选项打开图像选择器,用于在配置文件图像视图上显示。 我的问题是

打开图像选择器时,应用程序会自动将方向更改为纵向。

为了解决这个问题,我尝试在用户点击上传图片按钮时捕捉用户的方向,选择图片后,我强行将设备方向更改为上一个。 在iPhone 5及更高版本上,一切正常。但是当用户从选择器视图中选择图像时,iphone 4(在ios7上运行)会崩溃。我收到以下错误 -

preferredInterfaceOrientationForPresentation必须返回支持的界面方向!

我正在使用此代码检查用户的方向

System.out.println("data :"+(p_fileAccess.readLine().trim().startsWith("* Item Type")||p_fileAccess.readLine().trim().startsWith("^ Item Type ")));

并使用此代码设置方向。

-(void)checkCurrentDeviceOrientation
{
if([UIDevice currentDevice].orientation == 
UIDeviceOrientationLandscapeRight || [UIDevice 
currentDevice].orientation == UIDeviceOrientationLandscapeLeft )
{
self.currentOrientation = [UIDevice currentDevice].orientation;
}
else
{
self.currentOrientation = UIDeviceOrientationLandscapeRight;
}
}

希望在ios8及更高版本上一切正常,但在ios 7.0.1上运行的iphone 4上却没有。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我会尝试找到当前的设备方向,看看是否需要强制设备旋转。您还可能需要为plist文件添加Portrait和Landscape功能,然后您想要自动旋转的任何屏幕都可以添加一个方法来调用。

例如,您可以在应用委托中添加这样的方法,并使用可访问变量shouldAllowRotation:

-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    if(self.shouldAllowRotation)
        return UIInterfaceOrientationMaskAll;
    else
        return UIInterfaceOrientationMaskPortrait;
}

然后在每个视图中都可以调用

[[AppDelegate instance] setShouldAllowRotation:NO];

取决于是否应该旋转。当调用选择器时,只需调用应用程序代理并让它自动旋转,这将允许您获取

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeRight;
}

但是,如果您将视图控制器推送到导航控制器中的其他视图控制器堆栈,则仅需要横向将无法正常工作。您应该以模态方式显示横向约束视图控制器。