简体   繁体   中英

creating custom camera with square view on iOS

I am trying to create a custom camera experience on iOS and the following code snippet is as far as I got. Basically I want the usual camera view (ie with the following buttons: capture, flash, grid, front/back, cancel). But the only difference between the normal camera and mine is that I want a square for the preview surface ; not a rectangle. And then, what you see is what you get (WYSIWYG) such that there is no cropping necessary; as the user would have taken a square picture in the first place.

I have also been looking at the library https://github.com/danielebogo/DBCamera but I am not seeing how to customize it to my end. Any help? Thanks.

MY CODE SO FAR:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    //Capture Session
    AVCaptureSession *session = [[AVCaptureSession alloc]init];
    session.sessionPreset = AVCaptureSessionPresetPhoto;

    //Add device
    AVCaptureDevice *device =
    [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    //Input
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];

    if (!input)
    {
        NSLog(@"No Input");
    }

    [session addInput:input];

    //Output
    AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
    [session addOutput:output];
    output.videoSettings =
    @{ (NSString *)kCVPixelBufferPixelFormatTypeKey : @(kCVPixelFormatType_32BGRA) };

    //Preview Layer
    AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
    UIView *myView = self.view;
    previewLayer.frame = myView.bounds;
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    [self.view.layer addSublayer:previewLayer];

    //Start capture session
    [session startRunning];
}

This is the only custom code in a single view project on Xcode

You have two options for doing what you want, either stick with and customize a UIImagePickerController , or create your own by using the AVFoundation .

The UIImagePickerController does provide a fair bit of customization options, and this similar thread has some good information on that: link .

If you still want to make your own, I suggest heading over to the Apple Documentation and checking out this demo project called AVCam : link . However, it's way more in-depth than you'll probably need so I can recommend this video tutorial as well: link .

If going for the last option, I would like to mention that to make the "actual camera" fit the frame of your previewLayer , you can set the videoGravity on the AVCaptureVideoPreviewLayer to AVLayerVideoGravityResizeAspectFill .

Working with a custom camera can be a bit of a pain, but it'll pay dividends given that you'll really be able to customize your app experience.

The easiest way to do it is to use TGCameraViewController .

Using this TGCameraViewController , you can edit whole camera view. Also, It provides following functionalities:-

  • Easy way to access album (camera roll)
  • Flash auto, off and on
  • Focus
  • Front and back camera

Also you can refer AVCamManual: Extending AVCam to Use Manual Capture document for creating own custom camera.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM