Front facing camera in UIImagePickerController

后端 未结 9 1246
暗喜
暗喜 2020-12-02 06:42

I am developing the front facing camera app in iPad2 by using the UIImagePickerController.

When I capture the image it\'s shows as flipped from left to

9条回答
  •  孤城傲影
    2020-12-02 07:40

    I had the same problem - and the solution above only got me half the answer, because the user had to approve the mirrored image before getting to the next page of my app - where I use the captured image after flipping it.

    To solve this I had to flip the camera view whenever I switch to the front facing camera:

    - (IBAction)flipCamera:(id)sender {
    if(cameraUI.cameraDevice == UIImagePickerControllerCameraDeviceFront)
    {
        cameraUI.cameraDevice = UIImagePickerControllerCameraDeviceRear;
    }
    else {
        cameraUI.cameraDevice = UIImagePickerControllerCameraDeviceFront;
    }
    cameraUI.cameraViewTransform = CGAffineTransformScale(cameraUI.cameraViewTransform, -1,     1);     
    }
    

    Just to expand on this great answer, some typical complete code, Dec2013, iOS7 / Xcode5. Does everything. You just need an icon (cameraToggle.PNG in the example).

    -(void)showTheDeviceCamera
        {
        if ( ! [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] )
            return;
    
        // self.cameraController is a UIImagePickerController
        self.cameraController = [[UIImagePickerController alloc] init];
        self.cameraController.delegate = (id)self;
        self.cameraController.mediaTypes = @[(NSString *)kUTTypeImage];
        self.cameraController.allowsEditing = YES;
        self.cameraController.sourceType = UIImagePickerControllerSourceTypeCamera;
        [self presentViewController:self.cameraController animated:YES completion:NULL];
    
    
            // Add front-rear toggle button MANUALLY, IF NECESSARY
            // (You seem to usually get it for free, on iPhone, but
            // need to add manually on an iPad.)
    
            UIView *buttonView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cameraToggle"]];
            [buttonView sizeToFit];
    
            buttonView.userInteractionEnabled = YES;
            [self.cameraController.view addSubview:buttonView];
    
            UITapGestureRecognizer *tap =
                [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_frontRearButtonClicked) ];
            tap.numberOfTapsRequired = 1;
            [buttonView addGestureRecognizer:tap];
    
            // we'll add it at the top right .. could be anywhere you want
            buttonView.center = CGPointMake(
                    self.cameraController.view.frame.size.width-buttonView.frame.size.width,
                    3.0 * buttonView.frame.size.height
                    );
    
        }
    
    -(void)_frontRearButtonClicked
        {
        [UIView transitionWithView:self.cameraController.view
            duration:1.0
            options:UIViewAnimationOptionAllowAnimatedContent | UIViewAnimationOptionTransitionFlipFromLeft
            animations:^{
                if ( self.cameraController.cameraDevice == UIImagePickerControllerCameraDeviceRear )
                    self.cameraController.cameraDevice = UIImagePickerControllerCameraDeviceFront;
                else
                    self.cameraController.cameraDevice = UIImagePickerControllerCameraDeviceRear;
            } completion:NULL];
        }
    

提交回复
热议问题