63 votes

UIImagePickerController ne remplit pas l'écran

screenshot

Je vais ajouter une superposition de la UIImagePickerController et il est persistant barre noire en bas de la vue. Voici mon code pour instancier le contrôleur.

- (UIImagePickerController *)imagePicker {
    if (_imagePicker) {
        return _imagePicker;
    }

    _imagePicker = [[UIImagePickerController alloc] init];
    _imagePicker.delegate = self;

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        _imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

        _imagePicker.showsCameraControls = NO;

        _imagePicker.wantsFullScreenLayout = YES;
        _imagePicker.navigationBarHidden = YES;
        _imagePicker.toolbarHidden = YES;

    } else {
        _imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    }

    return _imagePicker;
}

Le retour de l'automate est affiché sous forme modale et fonctionne très bien (c'est à dire s'affiche en plein écran), quand je ne me cache pas les commandes de l'appareil.


Grâce à Ole de la suggestion, je l'ai eu à travailler avec ce code:

// Resize the camera preview
        _imagePicker.cameraViewTransform = CGAffineTransformMakeScale(1.0, 1.03);

Une augmentation de 3% de la hauteur a très bien fonctionné. Quand j'ajoute mon personnalisés de la barre d'outils au bas de l'écran, il n'est plus visible barre noire à travers la fenêtre.

55voto

Steve Points 18193

Le redimensionnement avec une valeur fixe n'est pas une bonne idée ... car je suis sûr que ceux qui ont utilisé la réponse acceptée ici l'ont probablement découvert lors de la sortie de l'iPhone 5.

Voici un extrait de code à mettre à l’échelle de façon dynamique en fonction de la résolution de l’écran afin d’éliminer la boxe aux lettres.

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

// iOS is going to calculate a size which constrains the 4:3 aspect ratio
// to the screen size. We're basically mimicking that here to determine
// what size the system will likely display the image at on screen.
// NOTE: screenSize.width may seem odd in this calculation - but, remember,
// the devices only take 4:3 images when they are oriented *sideways*.
float cameraAspectRatio = 4.0 / 3.0;
float imageWidth = floorf(screenSize.width * cameraAspectRatio);
float scale = ceilf((screenSize.height / imageWidth) * 10.0) / 10.0;

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

38voto

Ole Begemann Points 85798

Le format de l’appareil photo est 4: 3 et celui de l’écran est 3: 2. Il est donc tout simplement impossible pour l’image de la caméra de remplir l’écran à moins que vous ne souhaitiez le rogner au format 3: 2. Pour ce faire, appliquez une transformation d'échelle appropriée.

22voto

strikerdude10 Points 73

Hé, j'ai vu des gens qui continuaient à avoir la barre noire en bas après avoir calculé la balance pour l'iPhone 5. J'ai eu ce problème pendant un moment, mais j'ai alors compris que vous deviez traduire la vue pour qu'elle soit au milieu de l'écran. puis appliquez l'échelle. Voici mon code pour faire ces deux choses et cela fonctionne pour moi!

     CGSize screenBounds = [UIScreen mainScreen].bounds.size;

    CGFloat cameraAspectRatio = 4.0f/3.0f;

    CGFloat camViewHeight = screenBounds.width * cameraAspectRatio;
    CGFloat scale = screenBounds.height / camViewHeight;

    m_imagePickerController.cameraViewTransform = CGAffineTransformMakeTranslation(0, (screenBounds.height - camViewHeight) / 2.0);
    m_imagePickerController.cameraViewTransform = CGAffineTransformScale(m_imagePickerController.cameraViewTransform, scale, scale);
 

11voto

D'après mon expérience sur iOS 7, iphone 5S, pour voir le centre de l'image dans l'aperçu en plein écran, vous devez concaténer les transformations, et non les effectuer séquentiellement:

 pickerController.cameraOverlayView = self.view;

CGSize screenSize = [[UIScreen mainScreen] bounds].size;   // 320 x 568

float scale = screenSize.height / screenSize.width*3/4;  // screen height divided by the pickerController height ... or:  568 / ( 320*4/3 )

CGAffineTransform translate=CGAffineTransformMakeTranslation(0,(screenSize.height - screenSize.width*4/3)*0.5);
CGAffineTransform fullScreen=CGAffineTransformMakeScale(scale, scale);
pickerController.cameraViewTransform =CGAffineTransformConcat(fullScreen, translate);
 

10voto

emenegro Points 1316

Transformez-le avec ceci:

 #define CAMERA_TRANSFORM                    1.12412

_picker.wantsFullScreenLayout = YES;
_picker.cameraViewTransform = CGAffineTransformScale(_picker.cameraViewTransform, CAMERA_TRANSFORM, CAMERA_TRANSFORM);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X