相机与自定义视图

时间:2011-10-03 18:38:57

标签: ios objective-c camera uiimagepickercontroller custom-view

我的应用程序使用相机,我想在相机预览中添加叠加。例如,我想在使用相机时使用相框,我也想为相机操作添加自定义条。请帮我做同样的事。

4 个答案:

答案 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 ...

有一些属性,尤其是cameraOverlayViewshowsCameraControls属性。

因此,您可以隐藏控件,提供自定义叠加视图,并将子视图添加到此自定义视图以添加自定义按钮,框架等。

答案 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