iphone 5 - центр UIImagePickerController на экране

Я создал пользовательский оверлей для камеры, используя следующий код:

- (void) showCamera {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    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.overlay = [[CameraOverlayViewController alloc] init];
    self.overlay.pickerReference = self.picker;
    self.picker.cameraOverlayView = self.overlay.view;
    self.picker.delegate = self.overlay;

    [self presentViewController:self.picker animated:NO completion:nil];
}

Он отлично работает на iphone 4 (так как камера покрывает весь экран), но на iphone 5 камера находится в верхней части экрана, оставляя черный квадрат внизу. Поскольку я не могу изменить размер камеры, по крайней мере, я хочу центрировать ее по центру экрана, а затем добавить UIViews в качестве полей (очень похоже на приложение Camera Roll от Apple, где камера находится не сверху экрана, и есть элементы управления как над, так и под ним).

Может кто-нибудь посоветовать, пожалуйста, как я могу управлять кадром камеры в таком сценарии? Кроме того, поскольку поля будут только для лучшей визуализации, я не хочу показывать их на экране iphone 4 или ipad.

Заранее спасибо!

2 ответа

Использование cameraViewTransform свойство менять камеры y позиция. Например:

if(IS_IPHONE_5){
    CGAffineTransform tr =  self.imagePickerController.cameraViewTransform;
    tr.ty = 70;
    self.imagePickerController.cameraViewTransform= tr;
}

где IS_IPHONE_5 является:

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

Поскольку мы знаем, что камера всегда будет одинаковой длины по ширине экрана:

// получаем высоту камеры по соотношению 4:3

int cameraViewHeight = SCREEN_WIDTH * 1.333;

// получаем разницу между высотой экрана и высотой камеры. Распределить, разделив на 2.

int adjustedYPosition = (SCREEN_HEIGHT - cameraViewHeight) / 2;

// настраиваем контроллер выбора изображения

CGAffineTransform translate = CGAffineTransformMakeTranslation(0, adjustedYPosition);
self.imagePicker.cameraViewTransform = translate;
Другие вопросы по тегам