1

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

  1. 当预览屏幕处于活动状态时移除覆盖
  2. 不显示预览画面

我知道我可以通过设置 showsCameraControls = NO 来完成 #2 - 但是,我目前没有创建自己的相机控件,我仍然想使用默认控件。说我需要使用自定义构建的界面重新创建一个完美的 UI 只是为了绕过预览屏幕,这似乎是一种大锤方法。

4

3 回答 3

1

showsCameraControls = YES;可以在预览视图上使用和避免覆盖。我有同样的问题,可以通过NSNotificationCenter与@“_UIImagePickerControllerUserDidCaptureItem”和@“_UIImagePickerControllerUserDidRejectItem”一起使用来解决它。

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

于 2014-05-27T22:12:45.757 回答
1

我不知道还有人关注这个问题,但是可以popBack然后显示/呈现另一个屏幕/覆盖以进行额外的修剪/裁剪/编辑,并在取消回到文件夹时保持相同的滚动级别。

这里的代码片段:

你想在哪里显示图像选择器

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)
}

希望有帮助!

于 2020-05-16T14:22:16.717 回答
0

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

于 2013-09-11T22:47:59.550 回答