10

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

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

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

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

4

3 回答 3

1

确保将委托设置为imagePicker.delegate=self;

并调用委托方法

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

我希望这会有所帮助

于 2012-06-24T05:57:14.737 回答
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])
于 2019-02-08T15:55:02.893 回答
0

您必须NSNotificationCenter与@"_UIImagePickerControllerUserDidCaptureItem" 和@"_UIImagePickerControllerUserDidRejectItem" 一起使用。

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

于 2014-05-27T21:47:24.480 回答