如何在仅在 iOS-6 中支持横向方向的应用程序中使用 UIImagePickerController?

Posted

技术标签:

【中文标题】如何在仅在 iOS-6 中支持横向方向的应用程序中使用 UIImagePickerController?【英文标题】:how to use UIImagePickerController in an app which support Landscape orientation only in iOS-6? 【发布时间】:2012-10-12 13:07:14 【问题描述】:

我正在开发一个仅支持横向方向的应用程序。它使用UIImagePickerController 从库中挑选图像和/或视频。应用程序在 ios-5 或更早版本中运行良好,但当我尝试呈现图像选择器控制器时它会崩溃。崩溃后会显示以下消息:

* 由于未捕获的异常“UIApplicationInvalidInterfaceOrientation”而终止应用程序,原因:“支持的方向与应用程序没有共同的方向,并且 shouldAutorotate 正在返回 YES”

【问题讨论】:

看***.com/questions/20468335/… 【参考方案1】:

正如@rocky 所说,您必须在应用程序中添加 Potrait 模式才能使用 UIImagePickerController 像这样

或者 将此添加到您的仅限横向应用程序委托类中

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
    return UIInterfaceOrientationMaskAll;

我从Mr.Daniel's Answer 为您的仅风景应用找到了一个不错的解决方案, 由于您只需要为您的应用程序支持横向,您只需像这样为UINavigationController 添加一个类别

@implementation UINavigationController (LandscapeOnly)

- (NSUInteger) supportedInterfaceOrientations
    return UIInterfaceOrientationMaskLandscape;

@end

并将其添加到您的 viewControllers 中,它对我有用。

【讨论】:

您知道是否仍然适用于 iOS 7?我尝试这样做,但 UIImagePickerCtrler 在横向模式下不显示。 到目前为止我还没有在 iOS 7 中测试过.. 会尽快通知你@NorbertoBenavides @BetoBens 请看看这个链接Image Picker in Landscape App,可能对你有帮助 非常感谢@Bala,但如果我没有误解,答案是 UIImagePicker 子类,Apple 不推荐。我决定在我的应用程序的 IPAD 版本中使用弹出框,但在 iphone 版本中我还不能横向显示。【参考方案2】:

来自 UIImagePickerController 文档:

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

如果您想使用此控制器,您必须将纵向模式添加到您的支持界面方向。

【讨论】:

以上是关于如何在仅在 iOS-6 中支持横向方向的应用程序中使用 UIImagePickerController?的主要内容,如果未能解决你的问题,请参考以下文章

如何在仅纵向应用程序中使用 MPMovieViewController 播放横向视频

IOS6 横向在仅纵向 iPhone 应用程序中从 uiwebview 播放嵌入的 youtube 视频

IOS 6 方向 - 只有一个 Viewcontroller 支持横向和纵向方向 - 否则只支持纵向

在 ios 6 上仅在一个视图中启用横向

在仅纵向应用程序中以横向模式添加子视图

iOS 方向在特定屏幕上支持横向和纵向 - 不是所有屏幕