Как получить пользовательский оверлей для камеры UIImagePicker для полноэкранного режима в iOS 7?

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

Я сослался на несколько вопросов здесь на SO по этой теме, особенно этоодин, так же хорошо какПример Apple о том, как использовать пользовательское наложение для UIImagePickerController, но ни один из них не смог создать успешный полноэкранный результат с iOS 7.

Итак, вот как выглядит пользовательский интерфейс камеры с пользовательским оверлеем (без каких-либо кнопок):

Обратите внимание, что в нижней части экрана есть черная полоса. Я заметил, что ямог удалить черную полосу, если я изменюcameraAspectRatio в 1, но это искажает масштаб камеры, так как он имеет очень увеличенное изображение. Есть ли способ получить полноэкранный режим без чрезмерного искажения увеличения (я понимаю, что нужно немного), а также убрать черную полосу?

Вот мой код, который настраивает пользовательское наложение:

{
        self.imagePickerController.showsCameraControls = NO;

        [[NSBundle mainBundle] loadNibNamed:@"overlayView" owner:self options:nil];
        self.overlayView.frame = self.imagePickerController.cameraOverlayView.frame;
        self.imagePickerController.cameraOverlayView = self.overlayView;
        self.overlayView = nil;

        // Device's screen size (ignoring rotation intentionally):
        CGSize screenSize = [[UIScreen mainScreen] bounds].size;


        float cameraAspectRatio = 4.0 / 3.0; //! Note: 4.0 and 4.0 works
        float imageWidth = floorf(screenSize.width * cameraAspectRatio);
        float scale = ceilf((screenSize.height / imageWidth) * 10.0) / 10.0;

        self.imagePickerController.cameraViewTransform = CGAffineTransformMakeScale(scale, scale);

    }

Обновить:

Еще одна проблема, которую я заметил, это то, что изображение, отображаемое в режиме предварительного просмотра камеры, всегдаменьше и имеет меньше деталей, чем изображение, которое сохраняется при методе[self.imagePickerController takePicture], Проиллюстрировать:

Вот как выглядит клавиатура в окне предварительного просмотра камеры с черной полосой ниже (извините, она немного шаткая):

Однако обратите внимание, что фактическое захваченное изображение на панели предварительного просмотра имеет гораздо больше деталей, как показано здесь, особенно в направлении сверху, а также слева и справа.

Мой вопрос заключается в том, как можно настроить предварительный просмотр моей камеры таким образом, чтобы пользователь видел в предварительном просмотре именно то изображение, которое он будет захватывать и которое могло быть показано ему впоследствии? Спасибо!

Обновление 2

Вот весь код вviewDidLoad который устанавливает элементы управления камерой.

- (void)viewDidLoad
{
    [super viewDidLoad];

    //Appearance configuration
    self.navigationItem.hidesBackButton = YES;

    //UIImagePickerController initialization and setup
    self.imagePickerController = [[UIImagePickerController alloc] init];
    self.imagePickerController.delegate = self;
    self.imagePickerController.allowsEditing = NO;
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
        self.imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; //if there is a camera avaliable
    } else {
        self.imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;//otherwise go to the folder
    }
    self.imagePickerController.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeImage, nil];
    if (self.imagePickerController.sourceType == UIImagePickerControllerSourceTypeCamera)
    {
        self.imagePickerController.showsCameraControls = NO;

        [[NSBundle mainBundle] loadNibNamed:@"overlayView" owner:self options:nil];
        self.overlayView.frame = self.imagePickerController.cameraOverlayView.frame;
        self.imagePickerController.cameraOverlayView = self.overlayView;
        self.overlayView = nil;

        // Device's screen size (ignoring rotation intentionally):
        CGSize screenSize = [[UIScreen mainScreen] bounds].size;

        int heightOffset = 0;

        if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
        {
            heightOffset = 120; //whole screen :)
        }

        float cameraAspectRatio = 4.0 / 3.0; //! Note: 4.0 and 4.0 works
        float imageWidth = floorf(screenSize.width * cameraAspectRatio);
        float scale = ceilf(((screenSize.height + heightOffset) / imageWidth) * 10.0) / 10.0;

        self.imagePickerController.cameraViewTransform = CGAffineTransformMakeScale(scale, scale);

    }
}

И вviewWillAppearЯ называю вид выбора изображений:

BOOL modalPresent = (BOOL)(self.presentedViewController);
    //Present the Camera UIImagePicker if no image is taken
    if (!appDelegate.imageStorageDictionary[@"picture1"]){
        if (modalPresent == NO){ //checks if the UIImagePickerController is modally active
            [self presentViewController:self.imagePickerController animated:NO completion:nil];
        }
    }

Ответы на вопрос(9)

Ваш ответ на вопрос