我正在处理完全处于横向模式的应用。在其中一个视图中,我需要打开带覆盖视图的摄像头(UIImagePickerController)。但当我点击按钮打开相机时,它会因此问题而崩溃,即原因:
'支持的方向与...没有共同的方向 应用程序,并且shouldAutorotate返回YES'
我也把这一行放在了viewcontroller中但没有效果。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
请给我一些想法让它发挥作用。
答案 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;
}
并确保使用界面构建器的身份检查器将此类分配给基础导航控制器。
项目设置,
修改强>
您可以在横向模式下展示UIImagePickerController
。无论文档说什么,您实际上可以对其进行子类化,并可以覆盖它在横向模式下工作的功能。 (至少它在iOS 7上工作)
为此,您必须创建UIImagePickerController
的子类,并将上面的行添加到该子类。项目设置必须与屏幕截图相同(至少一个横向模式和一个纵向模式必须勾选)。
然后在呈现相机时使用该子类化ImagePicker控制器。它将成功地以横向模式加载相机。但标准相机控制将不对齐并搞砸。最好隐藏defaultControlls(picker.showsCameraControls = NO;
),就像你已经完成一样,并使用叠加视图。