我正在使用基本上以横向模式运行的游戏。 它可以选择更改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上却没有。
提前致谢!
答案 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;
}
但是,如果您将视图控制器推送到导航控制器中的其他视图控制器堆栈,则仅需要横向将无法正常工作。您应该以模态方式显示横向约束视图控制器。