UIImagePickerController相机预览在风景应用中为人像

在仅横向应用程序的iPhone应用程序中,我启动了UIImagePickerController来拍照,但是从相机显示的实时图像是纵向的,周围有空白。图像旋转。

按下相机按钮后,预览非常混乱,大部分预览不在屏幕上,并且视图未正确对齐。

苹果已经承认这是缺陷,并且正在对此进行研究。

我的问题是,任何人都可以通过变通办法(合法或非法)让我现在开始工作。我不会通过非法修复发布到App Store,但我会拥有一个更好的应用程序来进行用户测试-当前,相机在横向环境中几乎无法使用。

如果可以,我将附加一个简单的测试项目和图像。

编辑-只是为了澄清,我得到的图像是正确的风景。我希望相机和预览用户界面看起来正确!


缥缈止盈
浏览 668回答 3
3回答

慕的地10843

拍摄后我不想旋转图像;我想让预览在横向模式下正确显示。因此,在iOS 6中,我允许在应用程序级别使用纵向模式,但是将应用程序的根视图控制器设置为class MyNonrotatingNavigationController,其定义如下:@implementation MyNonrotatingNavigationController-(NSUInteger) supportedInterfaceOrientations{    return UIInterfaceOrientationMaskLandscape;}@end因此,此导航控制器内显示的所有内容都将沿横向显示(您可以使用任何视图控制器来执行此操作)。现在,当我需要显示图像选择器时,我用支持纵向模式的通用控制器替换了应用程序窗口的根视图控制器。为了防止老根视图控制器,并从取消分配自己的观点,我保持指向他们,直到我准备把它们放回应用程序窗口。#define APP_DELEGATE ((MyAppDelegate*)[[UIApplication sharedApplication] delegate])static UIViewController *pickerContainer = nil;static UIViewController *oldRoot = nil;static UIView *holdView = nil;-(void) showPicker{    ...create UIImagePickerController...    oldRoot = APP_DELEGATE.window.rootViewController;    holdView = [[UIView alloc] initWithFrame:APP_DELEGATE.window.bounds];    [holdView addSubview:oldRoot.view];    pickerContainer = [UIViewController new];    pickerContainer.view = [[UIView alloc] initWithFrame:APP_DELEGATE.window.bounds];    APP_DELEGATE.window.rootViewController = pickerContainer;    [pickerContainer presentViewController:picker animated:YES completion:NULL];}-(void) imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info{    [pickerContainer dismissViewControllerAnimated:YES completion:^{        dispatch_async( dispatch_get_main_queue(), ^{            APP_DELEGATE.window.rootViewController = oldRoot;            [APP_DELEGATE.window addSubview:oldRoot.view];            pickerContainer = nil;            oldRoot = nil;            holdView = nil;        });    }];}有点痛苦,但它确实适用于照片和视频。图像选择器的控件以纵向模式显示,但应用程序的其余部分仅横向显示。

富国沪深

我通过使UIImagePickerController屏幕以全屏模式显示来解决了此问题,这也是Apple建议在iPad上使用的模式。从UIImagePickerController文档:在iPad上,如果您指定UIImagePickerControllerSourceTypeCamera的源类型,则可以模式(全屏)或使用弹出窗口来呈现图像选择器。但是,Apple建议您仅全屏显示相机界面。
打开App,查看更多内容
随时随地看视频慕课网APP