2015-01-07 1 views
8

Я пытаюсь создать пользовательский опыт работы с камерой в iOS, и следующий фрагмент кода доходит до меня. В основном я хочу обычный просмотр камеры (т. Е. Со следующими кнопками: захват, вспышка, сетка, фронт/назад, отмена). Но единственная разница между нормальной камерой и моей - это то, что я хочу квадрат для поверхности предварительного просмотра; а не прямоугольник. И тогда то, что вы видите, это то, что вы получаете (WYSIWYG), чтобы не было необходимости в обрезке; так как пользователь взял бы квадратную картинку в первую очередь.Создание пользовательской камеры с квадратным видом на iOS

Я также смотрел на библиотеку 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

+0

Я немного смущен - вы хотите создать свой собственный просмотр с нуля с нуля или хотите использовать встроенный 'UIImagePickerController' и немного настроить его немного? – Aleksander

+0

Либо один будет в порядке, если я получу хороший контроль над тем, что происходит. Я также смотрел на вариант Picker; но, похоже, существует консенсус в отношении того, что этот подход является более низким; поэтому я изучаю подход «с нуля» в течение последних нескольких дней. –

+0

Да, 'UIImagePickerController' - это не то, что я лично рекомендую, если вы хотите получить полный контроль.Тем не менее, это очень быстро и легко реализовать. Он предоставляет множество вариантов настройки, взгляните на это сообщение: [link] (http://stackoverflow.com/questions/7639188/ios-camera-with-custom-view) Если вы хотите больше опций , перейдите к этой демонстрационной программе от Apple на AV-классах [link] (https://developer.apple.com/library/ios/samplecode/AVCam/Introduction/Intro.html#//apple_ref/doc/uid/ DTS40010112) – Aleksander

ответ

10

У вас есть два варианта делать то, что вы хотите, либо придерживаться и настроить UIImagePickerController , или создать свой собственный, используя AVFoundation.

UIImagePickerController действительно предоставляет несколько вариантов настройки, и эта аналогичная тема содержит некоторую полезную информацию: link.

Если вы по-прежнему хотите сделать свой собственный, я предлагаю перейти к документации Apple и проверить этот демонстрационный проект под названием AVCam: link. Тем не менее, это более глубокий, чем вам может понадобиться, поэтому я могу порекомендовать этот видеоурок: link.

Если ехать за последний вариант, я хотел бы отметить, что, чтобы сделать «фактическая камера» подходит кадр вашего previewLayer, вы можете установить videoGravity на AVCaptureVideoPreviewLayer к AVLayerVideoGravityResizeAspectFill.

+2

Есть ли способ, чтобы получившееся изображение соответствовало тому, что вы видите в предварительном просмотре? Это сработало, чтобы дать мне квадратный выход предварительного просмотра, но изображение, которое я получаю, по-прежнему является исходным соотношением сторон камеры. – sak

0

Работа с пользовательской камерой может быть немного больной, но она принесет дивиденды, учитывая, что вы действительно сможете настроить приложение.

Самый простой способ сделать это - использовать TGCameraViewController.

Используя этот TGCameraViewController, вы можете редактировать просмотр всей камеры. Кроме того, он предоставляет следующие функциональные возможности: -

  • Легкий способ открыть альбом (камера ролл)
  • вспышки авто, выкл и
  • Фокус
  • фронта и задняя камера

Также вы можете ссылаться на документ AVCamManual: Extending AVCam to Use Manual Capture для создания собственной пользовательской камеры.

Смежные вопросы