Comment obtenir les overlays pour UIImagePicker de l'appareil photo en plein écran sous iOS 7?

Je suis intéressé en utilisant une mesure de recouvrement pour la UIImagePickerController pour les contrôles de caméra qui prennent tout l'écran, très semblable à ce que la valeur par défaut de la Caméra app n'lors du passage à la fonction vidéo.

J'ai référencé plusieurs questions sur soi, sur ce sujet, en particulier, à cette un, ainsi que la Apple exemple sur la façon d'utiliser un overlay pour le UIImagePickerController, mais aucun d'eux n'a été en mesure de produire un bon, plein-écran de résultat avec iOS 7.

Jusqu'à présent, c'est ce que l'appareil photo de l'INTERFACE utilisateur ressemble avec les overlays (sans boutons):

Comment obtenir les overlays pour UIImagePicker de l'appareil photo en plein écran sous iOS 7?

Remarque qu'il y a une barre noire en bas de l'écran. J'ai remarqué que je pourrait obtenir la barre noire retiré si je change le cameraAspectRatio à 1, mais ce qui fausse le zoom de la caméra comme il a alors une très zoom en vue. Est-il un moyen pour avoir le plein écran, sans en dénaturer le zoom trop (je comprends qu'un petit peu), et également de supprimer les barres noires?

Voici mon code qui configure les overlays:

{
        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);

    }

Mise à jour:

Un autre problème que j'ai remarqué est que, l'image qui est affichée dans l'aperçu de l'appareil photo est toujours petits et a moins de détails que l'image qui est enregistré lorsque la méthode [self.imagePickerController takePicture]. Pour illustrer:

C'est ce que le clavier ressemble dans l'aperçu de la caméra avec la barre noire au-dessous (désolé il est un peu fragile):

Comment obtenir les overlays pour UIImagePicker de l'appareil photo en plein écran sous iOS 7?

Cependant, noter que l'image capturée dans le panneau d'aperçu a beaucoup plus de détails comme le montre ici, en particulier vers le haut, ainsi que les deux de gauche et de droite.

Comment obtenir les overlays pour UIImagePicker de l'appareil photo en plein écran sous iOS 7?

Ma question est, comment serait en mesure de régler mon prévisualisation de la caméra de sorte que ce que l'utilisateur voit dans l'aperçu est exactement l'image qu'il capture et pourrait être démontré par la suite? Merci!

Mise à jour 2

Ici est l'ensemble du code dans viewDidLoad qui met en place le contrôle de la caméra.

- (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);

    }
}

Et dans viewWillAppear, j'appelle l'image du sélecteur de vue:

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];
        }
    }
Hey.. Pouvez-vous s'il vous plaît dites-moi comment avez-vous mettre en œuvre le "Prendre la Prochaine Photo"? Je veux que mon appareil soit en mode capture, même après des photo a été cliqué.

OriginalL'auteur daspianist | 2013-12-26