如何子视图相机的看法?(How to subview a camera view?)

2019-07-30 03:09发布

我提出一个应用程序,将让用户看到他们自己的“镜像”(设备上的前置摄像头)。 我知道的制作UIImageViewController以期覆盖的多种方式,但我想我的应用程序有它是相反的方式。 在我的应用程序,我希望相机视图作为主视图的一个子视图,而快门动画或拍摄照片或拍摄视频和没有它全屏幕的能力。 有任何想法吗?

Answer 1:

做到这一点,最好的办法是不使用内置的UIImagePickerController,而是使用AVFoundation类。

你想创建一个AVCaptureSession并设置相应的输出和输入。 一旦它的配置,你可以得到一个AVCapturePreviewLayer它可以添加到您在视图控制器配置了看法。 预览层都有一个编号,使您可以控制预览的显示性能。

AVCaptureSession *session = [[AVCaptureSession alloc] init];
AVCaptureOutput *output = [[AVCaptureStillImageOutput alloc] init];
[session addOutput:output];

//Setup camera input
NSArray *possibleDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
//You could check for front or back camera here, but for simplicity just grab the first device
AVCaptureDevice *device = [possibleDevices objectAtIndex:0];
NSError *error = nil;
// create an input and add it to the session
AVCaptureDeviceInput* input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; //Handle errors

//set the session preset 
session.sessionPreset = AVCaptureSessionPresetMedium; //Or other preset supported by the input device   
[session addInput:input];

AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session];
//Set the preview layer frame
previewLayer.frame = self.cameraView.bounds;
//Now you can add this layer to a view of your view controller
[self.cameraView.layer addSublayer:previewLayer]
[session startRunning];

然后,您可以使用captureStillImageAsynchronouslyFromConnection:completionHandler:输出设备来捕捉图像。

有关AVFoundation是如何构造以及如何做到这一点的更详细示例的详细信息检出苹果文档 。 苹果AVCamDemo奠定了所有的这一点,以及



文章来源: How to subview a camera view?