【发布时间】:2011-03-01 15:16:53
【问题描述】:
我使用 UIImagePickerViewController 创建了一个简单的应用程序,用于从相机中捕获,但我想自定义用于从相机中抓取的界面,例如添加一些按钮。
UIImagePickerViewController 不允许直接这样做,那么您将如何创建一个自定义视图以允许显示实时摄像机源并从中捕获?
【问题讨论】:
标签: iphone ios cocoa-touch
我使用 UIImagePickerViewController 创建了一个简单的应用程序,用于从相机中捕获,但我想自定义用于从相机中抓取的界面,例如添加一些按钮。
UIImagePickerViewController 不允许直接这样做,那么您将如何创建一个自定义视图以允许显示实时摄像机源并从中捕获?
【问题讨论】:
标签: iphone ios cocoa-touch
简单的方法是继续使用UIImagePickerViewController,但将showsCameraControls 设置为NO,并使用cameraOverlayView 提供您自己的用户界面。
更困难(但更灵活)的方法是使用AVFoundation 类(尤其是AVCaptureVideoPreviewLayer 和AVCaptureStillImageOutput)来构建您自己的相机。
【讨论】:
是的,从代码创建一个 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];
【讨论】:
self.picker.navigationBarHidden = YES; self.picker.toolbarHidden = YES; self.picker.wantsFullScreenLayout = YES; 毫无意义。这些不会改变任何东西。您只需要self.picker.showsCameraControls = NO;
您需要将 showCameraControls 的值设置为 NO,并使用 cameraOverlayView 提供您自己的自定义叠加视图。
【讨论】: