在相机模式下的UIImagePickerView在iPad上的dismissViewController上显示所有黑色

Lir*_*ron 6 camera objective-c uiviewcontroller uiimagepickercontroller ios

我有一个应用程序,它使用UIImagePickerView允许用户使用他们的相机拍照或使用UIImagePickerView从相机胶卷中选择一个.

在获得图片后,我在选择器顶部使用了一个不同的对话框[picker presentViewController:myViewController animated:YES completion:nil].

如果我将我的应用程序作为iPhone应用程序运行(在我的iPad上),当我解雇myViewController使用[myviewController.presentingViewController dismissViewControllerAnimated:YES completion:nil]它时会返回显示CameraRoll或CameraFeed拍摄另一张照片.

但是在iPad上,如果我选择一张图片,它可以正常工作,但如果我使用相机拍照拍照,我就会得到一个黑屏.

知道为什么吗?

Art*_*ski 6

在iPad上使用不同于相机源的源时,您将在弹出窗口中呈现UIImagePickerController,您可以根据需要使用它.但是,当您决定选择源时UIImagePickerControllerSourceTypeCamera,选择器窗口将显示全屏,您有两种情况:

  1. 如果您使用自定义控件(showsCameraControls = NO),您可以使用相同的控制器拍摄任意数量的图片.
  2. 如果您使用默认控件(showsCameraControls = YES),在拍摄一张照片后,您必须关闭控制器,因为它再次无法使用,我猜这是您的情况.拍摄照片后,您将下一个控制器放在堆栈上,之后您将尝试返回拾取器控制器,但它不再可用,您可以看到黑屏.

Apple文档imagePickerController:didFinishPickingMediaWithInfo::

如果将图像选择器的showsCameraControls属性设置为NO并提供自己的自定义控件,则可以在取消图像选择器界面之前拍摄多张图片.但是,如果将该属性设置为YES,则在用户拍摄一张照片或取消操作后,您的代理人必须关闭图像选择器界面.

如果您想在这种情况下拍摄另一张照片,则必须返回基本控制器并再创建一个UIImagePickerController实例.

我希望这将有所帮助.

编辑:IMO重建视图控制器堆栈的最简单方法是在拍摄没有动画的照片后关闭选取器,之后显示下一个带动画的控制器.它会让用户感觉到,下一个控制器就会在拾取器控制器之后显示而没有任何"闪烁".

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [self dismissViewControllerAnimated:NO completion:^{
        [self presentViewController:<newController> animated:YES completion:nil];
    }];
}
Run Code Online (Sandbox Code Playgroud)