横向模式下的UIImagePickerViewController

时间:2014-03-04 11:26:20

标签: ios iphone objective-c ios7 uiimagepickercontroller

enter image description here我正在处理完全处于横向模式的应用。在其中一个视图中,我需要打开带覆盖视图的摄像头(UIImagePickerController)。但当我点击按钮打开相机时,它会因此问题而崩溃,即原因:

  

'支持的方向与...没有共同的方向   应用程序,并且shouldAutorotate返回YES'

我也把这一行放在了viewcontroller中但没有效果。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}

请给我一些想法让它发挥作用。

1 个答案:

答案 0 :(得分:1)

如果您使用UINavigationController作为基本视图控制器,则您提供的代码段不起作用。因为您要将该代码添加到UIViewController,但它已经嵌入UINavigationController

要解决此问题,您必须创建UINavigationController的子类,并将该格局相关代码添加到该子类。然后将此子类分配给Storyboard的基本导航控制器。然后这个问题就会解决。

这是您的导航控制器子类'.h文件

@interface YourCustomNavigationController : UINavigationController
@end

并将其添加到导航控制器子类'.m文件

- (BOOL)shouldAutorotate
{
    //returns true if want to allow orientation change
    return YES ;  
}
- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeLeft;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeLeft;
}

并确保使用界面构建器的身份检查器将此类分配给基础导航控制器。

项目设置,

enter image description here

修改

您可以在横向模式下展示UIImagePickerController。无论文档说什么,您实际上可以对其进行子类化,并可以覆盖它在横向模式下工作的功能。 (至少它在iOS 7上工作)

为此,您必须创建UIImagePickerController的子类,并将上面的行添加到该子类。项目设置必须与屏幕截图相同(至少一个横向模式和一个纵向模式必须勾选)。

然后在呈现相机时使用该子类化ImagePicker控制器。它将成功地以横向模式加载相机。但标准相机控制将不对齐并搞砸。最好隐藏defaultControlls(picker.showsCameraControls = NO;),就像你已经完成一样,并使用叠加视图。