iOS 7 横向应用程序无法访问照片库

Posted

技术标签:

【中文标题】iOS 7 横向应用程序无法访问照片库【英文标题】:iOS 7 Landscape only app can't access photo library 【发布时间】:2013-09-25 07:19:25 【问题描述】:

我有一个仅限横向的应用程序,每当我访问照片库时,应用程序都会崩溃(因为UIImagePickerViewController 正在尝试以纵向模式加载)。应用在 ios 5 和 6 中运行良好。

我收到以下错误,

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

*** First throw call stack:
(0x2ff7ae8b 0x3a2746c7 0x2ff7adcd 0x3277337d 0x3277a4c5 0x3277a47b 0x327795b3 0x326fff3d 0x326ffd19 0x326ff609 0x326ff467 0x3270c153 0x3270bbd3 0x327b7f67 0x327b7d83 0x327afdf3 0x327af279 0x327aefe9 0x327aef7d 0x32700533 0x32387f43 0x32383767 0x323835f9 0x3238300d 0x32382e1f 0x3237cb4d 0x2ff45f71 0x2ff438ff 0x2ff43c4b 0x2feae541 0x2feae323 0x34be52eb 0x327651e5 0x8c439 0x8c3c0)

`libc++abi.dylib:` terminating with uncaught exception of type `NSException`

当我启用纵向模式时,一切正常,但我不想启用纵向模式。解决方法是什么?

【问题讨论】:

iOS7 iPad Landscape only app, using UIImagePickerController 的可能重复项 【参考方案1】:

是的,我在应用中遇到了类似的问题

您可以为应用添加纵向模式支持,但将所有其他视图限制为仅支持横向, 模式,然后图像选择器将工作

UIImagePickerViewController 仅适用于纵向模式

要限制其他视图仅支持横向模式,请在视图控制器中覆盖 - (NSUInteger)supportedInterfaceOrientations

- (NSUInteger)supportedInterfaceOrientations
    return UIInterfaceOrientationMaskLandscape;

【讨论】:

你是如何限制所有其他视图只支持横向的?我尝试了所有可能的方法,但是当在 plist 中添加纵向模式支持时,它仍然会旋转到纵向。 向视图控制器添加代码 - (NSUInteger)supportedInterfaceOrientations return UIInterfaceOrientationMaskLandscape; 在我的情况下这不起作用,因为我的根视图控制器是一个导航控制器。所以我不得不用这些方法对导航控制器进行子类化。然后它起作用了!谢谢! :)【参考方案2】:

在 appdelegate.m 文件中添加以下代码 sn-p。这将解决上述问题。

 -(NSUInteger)application:(UIApplication *)application 
supportedInterfaceOrientationsForWindow:(UIWindow *)window

     if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
     
         return UIInterfaceOrientationMaskAll;
     
     else
     
         return UIInterfaceOrientationMaskAllButUpsideDown;
     

【讨论】:

【参考方案3】:

UIImagePickerController 的 CGAffineTransform 属性可用于使相机处于所需的方向。 imagePicker.cameraViewTransform=CGAffineTransformRotate(yourimagePicker.cameraViewTransform, M_PI/2);

或者,您也可以使用 CGAffineTransformScale 将自定义尺寸应用于您的相机。

【讨论】:

【参考方案4】:

你可以简单地使用 imagePicker 来展示

ImagePickerController *imagePickerController=[[ImagePickerController alloc]init];
imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext;

【讨论】:

以上是关于iOS 7 横向应用程序无法访问照片库的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 / Xcode 5:以编程方式访问设备启动图像

iOS:测试设备以允许访问照片库...重置设置

如何使用 ALAssetsLibrary 访问照片而不在 iOS5 中请求位置访问?

无法在 ios 9 中为 AVCaptureDevice 访问相机。

iOS:控制访问相机胶卷新出现

我无法使用 CDVPlugin 从 phonegap 2.7.0 中的 javascript 访问本机 iOS?