使用cameraOverlayView和UIImagePickerController

我知道这已被问了一些时间,但我无法find答案。

我有一个应用程序使用UIImagePickerController来拍照。 问题是我只想要相机选项可用,我明白,我需要隐藏标准控件:

 cameraUI.showsCameraControls=NO; 

并使用cameraOverlayView提供我自己的控制。 我已经看过苹果公司的PhotoPicker项目了,我最初的问题是如何获得一个Overlay对象到我的故事板? 我在图书馆里找不到这样的对象。 任何帮助感激地收到。

这里是代码:

 toolBar=[[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height-54, self.view.frame.size.width, 55)]; toolBar.barStyle = UIBarStyleBlackOpaque; NSArray *items=[NSArray arrayWithObjects: [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelPicture)], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(shootPicture)], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], nil]; [toolBar setItems:items]; // create the overlay view overlayView = [[OverlayView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height-44)]; // important - it needs to be transparent so the camera preview shows through! overlayView.opaque=NO; overlayView.backgroundColor=[UIColor clearColor]; // parent view for our overlay UIView *cameraView=[[UIView alloc] initWithFrame:self.view.bounds]; [cameraView addSubview:overlayView]; [cameraView addSubview:toolBar]; imagePickerController = [[UIImagePickerController alloc] init]; if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == NO){ NSLog(@"Camera not available"); return; } imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; imagePickerController.delegate = self; // hide the camera controls imagePickerController.showsCameraControls=NO; imagePickerController.wantsFullScreenLayout = YES; [imagePickerController setCameraOverlayView:cameraView]; [self presentViewController:imagePickerController animated:YES completion:nil]; 

在你的头文件中声明这个:

 UIImagePickerController * imagePickerController; UIToolbar *toolBar; OverlayView *overlayView; 

从Apples PhotoPicker添加这个OverlayView.h和.m类。

使用自定义照相机button拍摄照片的操作:

 -(void) shootPicture { [imagePickerController takePicture]; } - (IBAction)cancelPicture { [self dismissViewControllerAnimated:YES completion:nil]; } 

输出将如下所示附加屏幕截图(我在自定义叠加视图中添加了捕获button和取消button):

在这里输入图像说明

快乐编码:)

这是我的代码。 如果你希望摄像机在视图控制器打开时立即出现,请确保像viewDidAppear一样初始化UIImagePickerController(viewDidLoad不起作用)。

 @interface CameraViewController () @property UIImagePickerController *PickerController; @property CGFloat HeightOfButtons; @end - (UIView *)createCustomOverlayView { // Main overlay view created UIView *main_overlay_view = [[UIView alloc] initWithFrame:self.view.bounds]; // Clear view (live camera feed) created and added to main overlay view // ------------------------------------------------------------------------ UIView *clear_view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - self.HeightOfButtons)]; clear_view.opaque = NO; clear_view.backgroundColor = [UIColor clearColor]; [main_overlay_view addSubview:clear_view]; // ------------------------------------------------------------------------ // Creates two red buttons on the bottom of the view (on top of the live camera feed) // Then adds the buttons to the main overlay view // You can, of course, customize these buttons however you want // ------------------------------------------------------------------------ for(int i = 0; i < 2; i++) { self.HeightOfButtons = 100; UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; // when a button is touched, UIImagePickerController snaps a picture [button addTarget:self action:@selector(testIfButtonResponds) forControlEvents:UIControlEventTouchUpInside]; button.frame = CGRectMake( i * self.view.frame.size.width / 2, self.view.frame.size.height - self.HeightOfButtons, self.view.frame.size.width / 2, self.HeightOfButtons); [button setBackgroundColor:[UIColor redColor]]; [main_overlay_view addSubview:button]; } // ------------------------------------------------------------------------ return main_overlay_view; } - (void)makeCustomCameraAppear { self.PickerController = [[UIImagePickerController alloc] init]; self.PickerController.sourceType = UIImagePickerControllerSourceTypeCamera; self.PickerController.showsCameraControls = NO; self.PickerController.delegate = self; UIView *overlay_view = [self createCustomOverlayView]; [self.PickerController setCameraOverlayView:overlay_view]; [self presentViewController:self.PickerController animated:YES completion:NULL]; } - (void)viewDidAppear:(BOOL)animated { [self makeCustomCameraAppear]; } 

很棒的信息。 为了增加一些Raghu所做的:

顶部:

 UIImagePicker *_imagePicker; //inside your take a picture method UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 100)]; toolBar.barStyle = UIBarStyleBlackOpaque; NSArray *items=[NSArray arrayWithObjects: [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelPicker)], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(shootPicture)], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], nil]; [toolBar setItems:items]; toolBar.backgroundColor=[UIColor blackColor]; UIImageView *tp=[[UIImageView alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height-100, self.view.frame.size.width, 100)]; tp.userInteractionEnabled=YES; tp.backgroundColor=[UIColor blackColor]; [tp addSubview:toolBar]; //add the toolbar to the uiimageview _imagePicker=[[UIImagePickerController alloc]init]; _imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera; _imagePicker.delegate = self; _imagePicker.showsCameraControls=NO; //we will make custom controls. [_imagePicker.view addSubview:tp]; -(void)cancelPicker{ //get rid of the image picker [self dismissViewControllerAnimated:YES completion:nil]; //dismiss uiimagepicker _imagePicker=nil; } //take the picture, it will then go directly to - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info method -(void)shootPicture{ [_imagePicker takePicture]; }