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

时间:2013-03-15 07:57:14

标签: ios objective-c uiviewcontroller camera uiimagepickercontroller

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

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

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

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

知道为什么吗?

3 个答案:

答案 0 :(得分:6)

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

  1. 如果您使用自定义控件(showsCameraControls = NO),则可以 使用相同的控制器拍摄尽可能多的照片。
  2. 如果您使用默认控件(showsCameraControls = YES),之后 拍摄一张照片你必须关闭控制器,因为它是 再次无法使用,我猜这是你的情况。你是把 拍完照片后,下一个控制器在堆栈上,之后你 正试图回到你的选择器控制器,但它是无法使用的 更多,你可以看到黑屏。
  3. 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];
        }];
    }
    

答案 1 :(得分:1)

您可以尝试正常关闭UIImagePicker,当Pre-viwer视图控制器激活viewWillDesapear时,您向前一个viewController“说”,当它在viewWillAppear时,它再次显示UIImagePicker。我认为它有效。

答案 2 :(得分:1)

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