为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

缥缈止盈 2019-11-23 13:26:57
在仅横向应用程序的iPhone应用程序中,我启动了UIImagePickerController来拍照,但是从相机显示的实时图像是纵向的,周围有空白。图像旋转。按下相机按钮后,预览非常混乱,大部分预览不在屏幕上,并且视图未正确对齐。苹果已经承认这是缺陷,并且正在对此进行研究。我的问题是,任何人都可以通过变通办法(合法或非法)让我现在开始工作。我不会通过非法修复发布到App Store,但我会拥有一个更好的应用程序来进行用户测试-当前,相机在横向环境中几乎无法使用。如果可以,我将附加一个简单的测试项目和图像。编辑-只是为了澄清,我得到的图像是正确的风景。我希望相机和预览用户界面看起来正确!
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

拍摄后我不想旋转图像;我想让预览在横向模式下正确显示。因此,在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;

        });

    }];

}

有点痛苦,但它确实适用于照片和视频。图像选择器的控件以纵向模式显示,但应用程序的其余部分仅横向显示。


查看完整回答
反对 回复 2019-11-23
?
富国沪深

TA贡献1790条经验 获得超9个赞

我通过使UIImagePickerController屏幕以全屏模式显示来解决了此问题,这也是Apple建议在iPad上使用的模式。

UIImagePickerController文档:

在iPad上,如果您指定UIImagePickerControllerSourceTypeCamera的源类型,则可以模式(全屏)或使用弹出窗口来呈现图像选择器。但是,Apple建议您仅全屏显示相机界面。


查看完整回答
反对 回复 2019-11-23
  • 3 回答
  • 0 关注
  • 659 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信