Как создать пользовательский вид камеры вместо 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.