使用UIImagePickerController使UIView显示摄像机视图

时间:2013-05-10 08:17:16

标签: ios objective-c uiview camera uiimagepickercontroller

我正在尝试将相机看到的图像显示在我自己的自定义视图中。我不想为UIImagePickerController使用Apple自己的overlay属性:cameraOverlayView。

我不想要叠加,但它只是在我的特定视图中显示。我能够做到这一点的唯一方法是在我的UIView中创建一个子视图,但这样做不允许我使用我自己制作的任何自定义按钮而不是我的UIView。到目前为止我的代码是:

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];

[imagePickerController setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePickerController setShowsCameraControls:NO];
[imagePickerController setEditing:NO];
[imagePickerController setNavigationBarHidden:YES];

[self.videoPreviewView addSubview:[imagePickerController view]];
[imagePickerController viewWillAppear:YES];

其中videoPreviewView是我的UIView的出口!

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:2)

我自己没有尝试过,但我也想创建自定义相机视图。这可能不是您想要的,但它是另一种选择。我和.xib文件一起创建了一个自定义UIView。

在.m文件中,您只需将相应的委托方法调用到您实例化imagePicker的ViewController。在此ViewController中,您可以调用适当的方法,如takePicture

通过这种方式,您可以使用xib文件以任何方式显示叠加层。您可以实例化图像选择器

    FALKCameraView.h :

        @protocol CameraViewDelegate <NSObject>

        - (void)cameraPressed;

        - (void)buttonPressed;
        //etc


        @end

        @interface FALKCameraView : UIView

        @property (nonatomic, assign) NSObject<CameraViewDelegate> *delegate;

        //Camera Button pressed- notifies CameraViewDelegate
        - (IBAction)cameraPressed:(id)sender;
        //Button pressed - notifies CameraViewDelegate
        -(IBAction)buttonPressed:(id)sender;


        @end

    FALKCameraView.m:

    @implementation FALKCameraView

    @synthesize delegate;

    - (IBAction)cameraPressed:(id)sender{
        [delegate cameraPressed];
    }

    -(IBAction)buttonnPressed:(id)sender{
        [delegate buttonPressed];
    }


    @end


    FALKCameraViewController.h:

    @interface FALKCameraViewController : UIViewController <UIImagePickerControllerDelegate, CameraViewDelegate>

    - (void)cameraPressed;

    - (void)buttonPressed;

    @end


    FALKCameraViewController.m:

    @interface FALKCameraViewController
         @property (strong,nonatomic) UIImagePickerController *imagePicker;
    @end

    @implementation FALKCameraViewController
    @synthesise imagePicker;

    -(void)setUpCamera{
        if ([UIImagePickerController isSourceTypeAvailable:
                 UIImagePickerControllerSourceTypeCamera]){
                imagePicker = [[UIImagePickerController alloc] init];
                imagePicker.delegate = self;
                imagePicker.sourceType =
                UIImagePickerControllerSourceTypeCamera;
                imagePicker.showsCameraControls = NO;
                imagePicker.allowsEditing = NO;


imagePicker.mediaTypes = @[(NSString *) kUTTypeImage];



                NSString *nibName = @"FALKCameraView";

                NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:nibName
                                                              owner:nil
                                                            options:nil];
                if([nibs count]){
                    id nib = [nibs objectAtIndex:0];
                    if([nib isKindOfClass:[FALKCameraView class]]){
                        FALKCameraView *view = (FALKCameraView*)nib;
                        view.delegate = self;
                        imagePicker.cameraOverlayView = view;
                    }
                }

                [self presentViewController:imagePicker
                                   animated:NO completion:nil];
            }
    }



        -(void)cameraPressed:(id)sender{
               [imagePicker takePicture];
        }

    @end

答案 1 :(得分:1)

希望它会起作用,我只是添加了一个视图,你可以将任何自定义对象添加到选择器的overlayview

   if ([UIImagePickerController isSourceTypeAvailable:
     UIImagePickerControllerSourceTypeCamera]){
    imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.sourceType =
    UIImagePickerControllerSourceTypeCamera;
    imagePicker.showsCameraControls = NO;
    imagePicker.allowsEditing = NO;

    NSString *nibName = @"CameraView";

    NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:nibName
                                                  owner:nil
                                                options:nil];
    if([nibs count]){
        id nib = [nibs objectAtIndex:0];
        if([nib isKindOfClass:[CameraView class]]){
            CameraView *view = (CameraView*)nib;
            view.delegate = self;
            imagePicker.cameraOverlayView = view;
        }
    }

    [self presentViewController:imagePicker
                       animated:NO completion:nil];
}