自定义视图的相机

我的应用程序使用相机,我想添加覆盖在相机预览。 例如,我想在使用相机时使用相框,我也想为相机操作添加一个自定义栏。 请帮助我也这样做。

您可能正在尝试使用UIImagePickerController。 但我知道你的问题的一个解决scheme。 您可以使用AVCamCaptureManager和AVCamRecorder类轻松完成。 苹果公司在开发者网站上有一个演示程序。 它被命名为AVCam。 简单的说,当你点击打开摄像头时,它会调用负责打开iPhone摄像头并录制video或捕获audio的类和方法。 它调用由UIImagePickerController调用的相同的类。 所以你的相机会打开并开始input。

现在,如果你打开AVCam项目的xib文件,你会发现一个小的UIView对象。 此视图负责显示相机的供稿。 您可以根据所需的尺寸调整视图大小,并在相当多的区域显示相机的input。 你也可以根据你的select把框架图像放在它周围。

当我想调整相机的input信号并捕捉照片时,它适用于我。 我希望它也适合你。

从代码创build一个UIImagePickerController,调整它的属性,添加一个覆盖到它上面,并与你控制器,控制任何你想要的覆盖:自定义控件,覆盖图像等…

这给了这样的东西:

 self.picker = [[UIImagePickerController alloc] init]; self.picker.sourceType = UIImagePickerControllerSourceTypeCamera; self.picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; self.picker.cameraDevice = UIImagePickerControllerCameraDeviceRear; self.picker.showsCameraControls = NO; self.picker.navigationBarHidden = YES; self.picker.toolbarHidden = YES; self.picker.wantsFullScreenLayout = YES; // Insert the overlay self.overlay = [[OverlayViewController alloc] initWithNibName:@"Overlay" bundle:nil]; self.overlay.pickerReference = self.picker; self.picker.cameraOverlayView = self.overlay.view; self.picker.delegate = self.overlay; [self presentModalViewController:self.picker animated:NO]; 

OverlayViewController是您必须编写的控制器,用于控制添加到叠加层上的所有内容。

pickerReference是一个你可以继续发送订单给相机的属性。 例如,您可以从放置在覆盖层上的UIButton中调用以下IBAction:

 [self.pickerReference takePicture]; 

阅读UIImagePickerController类参考 ,这是正确的在文档中…

有这个属性,尤其是cameraOverlayViewshowsCameraControls属性。

因此,您可以隐藏控件,提供自定义覆盖视图,并为此自定义视图添加子视图以添加自定义button,框架等。

Swift 3版奥利弗答案:

 self.picker = UIImagePickerController() self.picker.sourceType = .camera self.picker.cameraCaptureMode = .photo self.picker.cameraDevice = .rear self.picker.showsCameraControls = false self.picker.isNavigationBarHidden = true self.picker.isToolbarHidden = true // Insert the overlay self.overlayViewController = self.storyboard?.instantiateViewController(withIdentifier: "Overlay") as! OverlayViewController self.picker.cameraOverlayView = self.overlayViewController.view self.picker.delegate = self.overlayViewController self.navigationController?.present(self.picker, animated: true, completion: nil) 

OverlayViewController协议:

 class OverlayViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate