6

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

获取图片后,我在选择器顶部使用[picker presentViewController:myViewController animated:YES completion:nil].

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

但是在 iPad 上,如果我选择一张图片,它可以工作,但如果我使用相机源拍照,我只是得到一个黑屏。

知道为什么吗?

4

3 回答 3

6

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

  1. 如果您使用自定义控件 (showsCameraControls = NO),您可以使用同一个控制器拍摄尽可能多的照片。
  2. 如果您使用默认控件(showsCameraControls = YES),则在拍摄一张照片后,您必须关闭控制器,因为它再次无法使用,我想这是您的情况。拍摄照片后,您将下一个控制器放入堆栈,之后您尝试返回选择器控制器,但它不再可用,您可以看到黑屏。

苹果文档imagePickerController:didFinishPickingMediaWithInfo:

If you set the image picker’s showsCameraControls property to NO and provide your own custom controls, you can take multiple pictures before dismissing the image picker interface. However, if you set that property to YES, your delegate must dismiss the image picker interface after the user takes one picture or cancels the operation.

If you want to take another picture in this case you have to go back to your base controller and create the UIImagePickerController instance one more.

I hope this will help.

Edit: The easiest way IMO to rebuild your view controllers stack is to dismiss the picker after taking a photo without animation and after that show the next controller with animation. It will give the user feeling, that the next controller is displayed just after the picker controller without any "flashing".

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [self dismissViewControllerAnimated:NO completion:^{
        [self presentViewController:<newController> animated:YES completion:nil];
    }];
}
于 2013-05-14T14:43:49.317 回答
1

您可以尝试正常关闭 UIImagePicker,并且当 Pre-viwer View Controller 激活 viewWillDesapear 时,您对前一个 viewController “说”当它 viewWillAppear 时,它会再次显示 UIImagePicker。我认为它有效。

于 2013-05-13T18:37:14.290 回答
1

我在一个应用程序中遇到了类似的问题。我最终在弹出式控制器中呈现相机的图像选择器,而不是在 iPad 上模态显示。我不确定这是否适用于您的应用,但这是一种不同的方法。我这样做没有问题,并且更喜欢它。

于 2013-05-14T02:34:15.887 回答