横向模式下的 UIImagePicker 控制器

Posted

技术标签:

【中文标题】横向模式下的 UIImagePicker 控制器【英文标题】:UIImagePicker Controller in Landscape mode 【发布时间】:2015-12-20 11:02:40 【问题描述】:

我在我的游戏中使用了一个UIImagePicker Controller。它在 iPad 横向模式下使用 UIPopOver Controller 可以正常工作,但由于 iPhone 不支持 UIPopoverController,所以我在 iPhone 上使用了 UIIMagePicker Controller。 现在,它在我的 iPhone 中崩溃了。请帮我。

我在项目的部署信息中选择了以下方向:

横向左侧 横向右侧

【问题讨论】:

收集日志错误并放在这里。 @HaroldoGondim 没有错误日志,但它在这一行的主文件上崩溃.... int retVal = UIApplicationMain(argc, argv, nil, @"AppController"); [池释放];返回 retVal; @HaroldoGondim 我猜,它需要在部署信息部分的设备方向中启用纵向模式。但我没有选择它们,因为它会影响我的整体 UI 集成。 【参考方案1】:

UIImagePickerController 仅支持纵向,因此您必须确保您的应用具有纵向作为支持的方向。请参阅UIImagePickerController Class Reference 文档,我已包含该文档的引用。

重要

UIImagePickerController 类仅支持纵向模式。这 class 旨在按原样使用,不支持子类化。 此类的视图层次结构是私有的,不得修改, 除了一个例外。您可以将自定义视图分配给 cameraOverlayView 属性并使用该视图来呈现额外的 信息或管理相机界面之间的交互 和你的代码。


编辑

看UIApplicationDelegate Protocol,有如下方法

func application(application: UIApplication,
supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask

来自文档:

讨论

此方法返回界面方向的总集 应用程序支持。在确定是否旋转特定 视图控制器,此方法返回的方向是 与根视图支持的方向相交 控制器或最顶层呈现的视图控制器。应用程序和视图 在允许轮换之前,控制器必须同意。

如果您不实现此方法,应用程序将使用 应用程序 Info.plist 的 UIInterfaceOrientation 键作为默认值 界面方向。


【讨论】:

是的。谢谢,但只支持 UIImagePickerController 我需要启用纵向模式,这样做会影响我完全处于横向模式的整体 UI。如果您有任何建议,请告诉我。 现在我已经用以下方法解决了我的问题,但我不确定它是否有效 - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window if ([ self.window.rootViewController.presentedViewController isKindOfClass: [UIImagePickerController class]]) return UIInterfaceOrientationMaskAll; 否则返回 UIInterfaceOrientationMaskLandscape; 你用了什么方法? 如果这是在设备旋转时调用的,而不仅仅是在应用启动时,您可能有您的解决方案,正如我的回答中所述,您的应用必须支持 UIImagePickerController 的纵向。 appdelegate 中的这个方法 >supportedInterfaceOrientationsForWindow

以上是关于横向模式下的 UIImagePicker 控制器的主要内容,如果未能解决你的问题,请参考以下文章

UIIMagePicker 相机横向方向问题

横向模式下的 UINavigationController 后退按钮问题?

横向模式下的分页视图控制器

横向模式下的presentViewController宽度

横向模式下的导航控制器堆栈,但总是以纵向帧大小模态呈现视图控制器视图

如何快速修复横向模式下的约束?