天天看點

ios 自定義拍照頁面_建立在iOS的方形的觀點的自定義照相機

ios 自定義拍照頁面_建立在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 (i.e. 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.