你如何创build一个自定义的摄像机视图,而不是UIImagePickerViewController?

我创build了一个简单的应用程序,使用UIImagePickerViewController从相机捕获,但我想定制从相机抓取的界面,如添加一些button。

UIImagePickerViewController不允许直接,所以你将如何创build一个自定义的视图,允许显示实时摄像头饲料和捕捉它?

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

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

是的,从代码创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]; 

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