UIImagePickerController在预览/跳过预览时没有覆盖

时间:2013-05-07 10:25:46

标签: iphone uiviewcontroller

我正在使用iPhone应用程序,该应用程序使用UIImagePickerController的相机覆盖视图。但是,我遇到的问题是,当拍摄照片并弹出预览屏幕时,我的叠加仍然在屏幕上。这看起来很奇怪(图片是旋转的,但不是叠加)。所以,我需要做两件事之一,这两件事都证明比我希望的更难:

  1. 预览屏幕处于活动状态时删除叠加层
  2. 不显示预览屏幕
  3. 我知道我可以通过设置showsCameraControls = NO来完成#2 - 但是,我目前没有创建自己的相机控件,我仍然想使用默认控件。看起来像是一个大锤的方法,我需要使用自定义构建的界面重新创建一个完美的UI,以便绕过预览屏幕。

3 个答案:

答案 0 :(得分:1)

可以使用showsCameraControls = YES;并避免预览视图上的叠加。我有同样的问题,可以通过使用NSNotificationCenter和@“_ UIImagePickerControllerUserDidCaptureItem”和@“_ UIImagePickerControllerUserDidRejectItem”来解决它。

进入预览视图时,您可以删除叠加层:)可在此处找到工作代码示例:https://stackoverflow.com/a/23899448/1933185

答案 1 :(得分:1)

我仍然不知道有人在追随此问题,但是可以弹出并显示/显示另一个屏幕/叠加层以进行其他修剪/裁剪/编辑,以及取消滚动时保持相同滚动级别的文件夹。

此处的代码段:

您想显示图像选择器的地方

present(imagePicker, animated: true)

然后在选择完成时(此问题仅在选择视频时发生)

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    let mediaType = info[UIImagePickerController.InfoKey.mediaType] as! String

    if (mediaType == "public.image"){
        NSLog("%@", "got image")
    }else if (mediaType == "public.movie"){
        NSLog("%@", "got movie")

        // dismiss(animated: true)

        let trimView = storyBoard.instantiateViewController(withIdentifier: "TrimView") as! TrimViewController

        trimView.delegate = self
        trimView.modalPresentationStyle = .pageSheet

        imagePicker.popViewController(animated: false)
        imagePicker.present(trimView, animated: true)

    }

}

添加一些额外的委托或进行编译,但是在TrimViewController的取消处理程序中执行此操作,以返回到UIImagePickerController拾取视图的最后一个位置

func didFinishTrim() {
    imagePicker.dismiss(animated: true)
}

希望有帮助!

答案 2 :(得分:0)

据我所知,如果不使用AVFoundation创建自己的自定义图像选择器,这是不可能的。这个问题的最佳答案是here