UIImagePickerController在预览时没有叠加

时间:2012-06-24 02:50:22

标签: iphone uiimagepickercontroller

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

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

    另一方面,我觉得内置相机不使用预览屏幕很烦人,但Apple显然迫使应用程序竭尽全力避免使用它。看起来很奇怪。

3 个答案:

答案 0 :(得分:1)

确保将代理设置为imagePicker.delegate=self;

并调用委托方法

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info; 从superview中删除imagePicker.view的位置(取决于你调用它的方式)

我希望有帮助

答案 1 :(得分:1)

我关闭了相机控件。这样做会关闭预览屏幕。因此,您可以从那里创建自己的预览屏幕(或者根本没有预览屏幕,而我只是在调用takePicture()之后使用照片。当您调用takePicture()函数时,您会得到正确的回调离开是

let vc                      = UIImagePickerController()
vc.sourceType               = .camera
vc.showsCameraControls      = false
let mask                    = MyMaskXibClassMask(vc, self)
vc.cameraOverlayView        = mask.view
vc.cameraOverlayView?.frame = self.view.bounds
self.present(vc, animated: true, completion:
{
  if let camvc = vc.visibleViewController
  {
    camvc.addChild(mask)
  }
})

在MyMaskXibClassMask上有您要拍照的按钮以及您需要的其他任何地方。然后也在我们的MyMaskXibClassMask下

@IBAction func take_picture()
{
  camera.delegate = self
  camera.takePicture()
}

当您调用“ takePicture()”时,您的代表将被呼叫(因此您可以完全跳过预览)

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

答案 2 :(得分:0)

您必须使用NSNotificationCenter以及@" _UIImagePickerControllerUserDidCaptureItem"和@" _UIImagePickerControllerUserDidRejectItem"。

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