如何创建自定义相机视图,而不是使用UIImagePickerViewController?

29

我使用UIImagePickerViewController创建了一个简单的应用程序,用于从相机拍摄,但我想自定义界面以便从相机中获取,例如添加一些按钮。

UIImagePickerViewController不允许直接进行此操作,那么如何创建一个自定义视图,以允许显示实时摄像头视频并从中捕获?


可能是重复的问题:iPhone: Camera Preview Overlay - rptwsthi
3个回答

30

简单的方法是继续使用UIImagePickerViewController,但将showsCameraControls设置为NO,并使用cameraOverlayView提供自己的用户界面。

更困难(但更灵活)的方法是使用AVFoundation类(特别是AVCaptureVideoPreviewLayerAVCaptureStillImageOutput)构建自己的相机。


23

是的,可以通过代码创建一个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];

5
根据我的经验,self.picker.navigationBarHidden = YES;``self.picker.toolbarHidden = YES;``self.picker.wantsFullScreenLayout = YES;是无意义的代码,它们并不会改变任何东西。你只需要使用self.picker.showsCameraControls = NO;即可。 - Yevhen Dubinin

4

您需要将showCameraControls的值设置为NO,并使用cameraOverlayView提供自己的自定义覆盖视图。


1
@HitendraHckr 为什么我会从哪个以前的答案复制?我的答案是这一页上最旧的: Mar 1 '11 at 15:20。我不确定我怎么可能从未来的答案中复制。 - Vijay Kiran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接