【问题标题】:How do you create a custom camera view, instead of UIImagePickerViewController?如何创建自定义相机视图,而不是 UIImagePickerViewController?
【发布时间】:2011-03-01 15:16:53
【问题描述】:

我使用 UIImagePickerViewController 创建了一个简单的应用程序,用于从相机中捕获,但我想自定义用于从相机中抓取的界面,例如添加一些按钮。

UIImagePickerViewController 不允许直接这样做,那么您将如何创建一个自定义视图以允许显示实时摄像机源并从中捕获?

【问题讨论】:

标签: iphone ios cocoa-touch


【解决方案1】:

简单的方法是继续使用UIImagePickerViewController,但将showsCameraControls 设置为NO,并使用cameraOverlayView 提供您自己的用户界面。

更困难(但更灵活)的方法是使用AVFoundation 类(尤其是AVCaptureVideoPreviewLayerAVCaptureStillImageOutput)来构建您自己的相机。

【讨论】:

    【解决方案2】:

    是的,从代码创建一个 UIImagePickerController,调整它的属性,在上面添加一个叠加层,然后用你的控制器,控制你想要在那个叠加层上的任何东西:自定义控件,叠加图像等等......

    这给出了这样的东西:

    self.picker = [[UIImagePickerController alloc] init];
    self.picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    self.picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
    self.picker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
    self.picker.showsCameraControls = NO;
    self.picker.navigationBarHidden = YES;
    self.picker.toolbarHidden = YES;
    self.picker.wantsFullScreenLayout = YES;
    
    // Insert the overlay
    self.overlay = [[OverlayViewController alloc] initWithNibName:@"Overlay" bundle:nil];
    self.overlay.pickerReference = self.picker;
    self.picker.cameraOverlayView = self.overlay.view;
    self.picker.delegate = self.overlay;
    
    [self presentModalViewController:self.picker animated:NO];
    

    OverlayViewController 是您必须编写的控制器,以控制您添加到叠加层上的所有内容。

    pickerReference 是您可以保留的属性,用于向相机发送订单。例如,您可以从来自放置在叠加层上的 UIButton 的 IBAction 调用以下内容:

    [self.pickerReference takePicture];
    

    【讨论】:

    • 根据我的经验,self.picker.navigationBarHidden = YES; self.picker.toolbarHidden = YES; self.picker.wantsFullScreenLayout = YES; 毫无意义。这些不会改变任何东西。您只需要self.picker.showsCameraControls = NO;
    【解决方案3】:

    您需要将 showCameraControls 的值设置为 NO,并使用 cameraOverlayView 提供您自己的自定义叠加视图。

    【讨论】:

    • @HitendraHckr 为什么我从哪个上一个答案中复制?我的答案是此页面上最旧的答案:2011 年 3 月 1 日 15:20。我不确定如何从未来的答案中复制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多