Как создать пользовательский вид камеры вместо UIImagePickerViewController?

Я создал простое приложение, использующее UIImagePickerViewController для захвата с камеры, но я хотел бы настроить интерфейс для захвата с камеры, например, добавить несколько кнопок.

UIImagePickerViewController не разрешает это напрямую, так как бы вы создали пользовательский вид, который позволяет отображать прямую трансляцию камеры и захватывать ее?

Ответ 1

Самый простой способ - продолжать использовать UIImagePickerViewController, но установить showsCameraControls в НЕТ и предоставить свой собственный пользовательский интерфейс, используя cameraOverlayView.

Более сложным (но более гибким) способом является использование классов AVFoundation (особенно AVCaptureVideoPreviewLayer и AVCaptureStillImageOutput) для создания собственной камеры.

Ответ 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 - это свойство, которое вы можете сохранить для отправки заказов на камеру. Например, вы можете вызвать следующее из IBAction, исходящего из UIButton, помещенного на наложение:

[self.pickerReference takePicture];

Ответ 3

Вам нужно установить значение showCameraControls в НЕТ и предоставить свой собственный пользовательский вид наложения с помощью камерыOverlayView.