iOS: Как использовать камеру для съемки, не отображая экран камеры?

#ios

#iOS

Вопрос:

Я пытаюсь заняться разработкой iOS, поэтому я все еще новичок. Мне удалось скопировать и вставить контроллер камеры (скопированный отсюда) и заставить его работать.

Однако я пытаюсь создать приложение для шпионской камеры, поэтому я не хочу, чтобы экран выглядел как камера. Я хочу покрыть его черным цветом. Я попытался установить яркость на 0, но это просто делает все тусклым. Установка черного фона также не сработала, поскольку вид с камеры находится на переднем плане. Есть ли способ создать экземпляр контроллера камеры и активировать аппаратное обеспечение камеры и каким-то образом отредактировать представление, которое поставляется вместе с ним, чтобы оно не отображалось?

 #import "EMCameraController.h"

@interface EMCameraController ()
@property (strong, nonatomic) IBOutlet UIImageView *camera;

@end

@implementation EMCameraController

@synthesize camera=_camera;
- (IBAction)showCamera:(id)sender {
    [self startCameraControllerFromViewController: self

                                    usingDelegate: self];

    NSLog(@"done!");
}



- (BOOL) startCameraControllerFromViewController: (UIViewController*) controller

                                   usingDelegate: (id <UIImagePickerControllerDelegate,

                                                   UINavigationControllerDelegate>) delegate {



    if (([UIImagePickerController isSourceTypeAvailable:

          UIImagePickerControllerSourceTypeCamera] == NO)

        || (delegate == nil)

        || (controller == nil))

        return NO;





    UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init];

    cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;



    // Displays a control that allows the user to choose picture or

    // movie capture, if both are available:

    cameraUI.mediaTypes =

    [UIImagePickerController availableMediaTypesForSourceType:

     UIImagePickerControllerSourceTypeCamera];



    // Hides the controls for moving amp; scaling pictures, or for

    // trimming movies. To instead show the controls, use YES.

    cameraUI.allowsEditing = NO;



    cameraUI.delegate = delegate;



    [controller presentModalViewController: cameraUI animated: NO];

    cameraUI.view.backgroundColor = [UIColor blackColor]; //<-- doesn't work since camera view is in foreground
    [[UIScreen mainScreen] setBrightness:0.0];  //<-- not working the way I want it.

    return YES;

}


@end
  

Ответ №1:

Вы должны использовать AVCapture* подход. Это позволяет делать снимки непосредственно с камеры. Взгляните, например, на этот пример https://developer.apple.com/library/ios/samplecode/SquareCam/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011190-Intro-DontLinkElementID_2

Комментарии:

1. Другой пример использования AVFoundation: developer.apple.com/library/ios/samplecode/AVCam/Listings /…