我的应用程序使用相机,我想在相机预览中添加叠加。例如,我想在使用相机时使用相框,我也想为相机操作添加自定义条。请帮我做同样的事。
答案 0 :(得分:56)
您可能正在尝试使用UIImagePickerController。但我知道这个问题的解决方案。您可以使用AVCamCaptureManager和AVCamRecorder类轻松完成。 Apple在其开发者网站here上构建了一个演示程序。它被命名为AVCam。简单来说,当您单击打开相机时,它会调用负责打开iPhone相机并录制视频或捕获音频的类和方法。它调用UIImagePickerController调用的相同类。所以你的相机会打开并开始输入。
现在,如果您打开该AVCam项目的xib文件,您将找到一个小的UIView对象。此视图负责显示相机的Feed。您可以根据需要调整视图大小,摄像机的输入将显示在该区域中。您也可以根据自己的选择将框架图像放在其周围。
当我想调整相机的输入源并拍摄照片时,它对我有用。我希望它也适合你。
答案 1 :(得分:41)
从代码创建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];
答案 2 :(得分:4)
阅读文档中正确的UIImagePickerController Class Reference ...
有一些属性,尤其是cameraOverlayView
和showsCameraControls
属性。
因此,您可以隐藏控件,提供自定义叠加视图,并将子视图添加到此自定义视图以添加自定义按钮,框架等。
答案 3 :(得分:0)
Swift 3版本的答案来自Oliver:
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