在 iOS 上创建具有方形视图的自定义相机

creating custom camera with square view on iOS

我正在尝试在 iOS 上创建自定义相机体验,以下代码片段是我所获得的。基本上我想要通常的相机视图(即使用以下按钮:捕捉、闪光、网格、front/back、取消)。但是普通相机和我的唯一区别是我想要预览表面的正方形;不是矩形。然后,所见即所得 (WYSIWYG),无需裁剪;因为用户一开始会拍一张方形照片。

我也一直在查看库 https://github.com/danielebogo/DBCamera,但我不知道如何自定义它以达到我的目的。有什么帮助吗?谢谢。

到目前为止我的代码:

- (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];
}

这是 Xcode 上单个视图项目中唯一的自定义代码

您有两种选择来做您想做的事情,要么坚持并自定义 UIImagePickerController,要么使用 AVFoundation.

创建您自己的

UIImagePickerController 确实提供了相当多的自定义选项,这个类似的线程有一些很好的信息:link

如果您仍想自己制作,我建议您转到 Apple 文档并查看这个名为 AVCam 的演示项目:link. However, it's way more in-depth than you'll probably need so I can recommend this video tutorial as well: link.

如果选择最后一个选项,我想提一下,要使 "actual camera" 适合您的 previewLayer 框架,您可以在 [=] 上设置 videoGravity 16=] 到 AVLayerVideoGravityResizeAspectFill.

使用自定义相机可能会有点痛苦,但它会带来好处,因为您真的能够自定义您的应用程序体验。

最简单的方法是使用 TGCameraViewController

使用此 TGCameraViewController,您可以编辑整个相机视图。此外,它还提供以下功能:-

  • 访问相册(相机胶卷)的简便方法
  • 闪光灯自动、关闭和开启
  • 专注
  • 前后摄像头

您也可以参考 AVCamManual: Extending AVCam to Use Manual Capture 文档来创建自己的自定义相机。