UIImagePickerController + Recorte: ¿qué permite editar y qué no lo hace?

Después de leer la documentation y el código de muestra de Apple con respecto al UIImagePickerController y después de leer muchos tutoriales e incluso preguntas aquí en Stackoverflow ( o aquí ), llegué a la conclusión de que el UIImagePicker incorporado puede presentar una "window de recorte" para el usuario y deja que el usuario recorte y mueva la parte derecha de la image que quiere usar.

Pero revisando estos ejemplos en iOS 7.1, no aparece ninguna window de recorte. No aparece nada que permita al usuario recortar una parte de la image tomada. Todas las testings se realizaron en hardware real (iPhone 5S), no se usó ningún simulador de iPhone aquí debido a la falta de camera;)

Además, en el método de delegado "didFinishPickingMediaWithInfo" no hay ninguna input de "UIImagePickerControllerEditedImage" en la "info" -NSDictionary.

Lo que hice:

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; #if TARGET_IPHONE_SIMULATOR // iPhone-Simulator has no camera, just save images to the photoalbum on the simulator to use them here imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; #else imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; #endif imagePickerController.editing = YES; imagePickerController.delegate = (id)self; imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; [self presentModalViewController:imagePickerController animated:YES]; 

y el método delegado:

 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; // .... do something } 

En este punto, solo hay 3 keys disponibles en el dictionary con el nombre "info":

  • UIImagePickerControllerOriginalImage
  • UIImagePickerControllerMediaMetadata
  • UIImagePickerControllerMediaType

nada más. Además, no apareció ninguna window de recorte ni ningún otro control similar.

¿Estoy equivocado con mi expectativa sobre el comportamiento de ImagePicker? En este SF-Question el usuario escribió "Crop window appears" . ¿Se eliminó la característica? ¿La documentation está desactualizada o estoy completamente equivocada aquí?

También probé este código tomado de otra respuesta a una pregunta similar :

 - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [picker dismissViewControllerAnimated:YES completion:^{ // Edited image works great (if you allowed editing) UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage]; // AND the original image works great UIImage *originalImage = [info objectForKey:UIImagePickerControllerOriginalImage]; // AND do whatever you want with it, (NSDictionary *)info is fine now UIImage *myImage = [info objectForKey:UIImagePickerControllerEditedImage]; }]; } 

No aparece window de recorte, la key "UIImagePickerControllerEditedImage" no está presente en info-NSDictionary.

¿Alguien me puede explicar el comportamiento correcto? Muchas gracias por adelantado.

esta es para mí:

 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *originalImage, *editedImage; editedImage = (UIImage *) [info objectForKey:UIImagePickerControllerEditedImage]; originalImage = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage]; if (editedImage) self.profilePictureImageView.image = editedImage; else self.profilePictureImageView.image = originalImage; [picker dismissViewControllerAnimated:YES completion:nil]; } 

En primer lugar, asegúrese de importar el siguiente file de encabezado (debe importar el marco de MobileCoreServices a su proyecto):

 #import <MobileCoreServices/UTCoreTypes.h> 

Luego testing el siguiente código

  UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; #if TARGET_IPHONE_SIMULATOR if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]){ imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; } #else if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){ imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; } #endif imagePicker.mediaTypes = @[(NSString *)kUTTypeImage]; imagePicker.allowsEditing = YES; imagePicker.delegate = self; //[self presentModalViewController:imagePicker animated:YES]; <-- This method is deprecated use the following instead [self presentViewController:imagePicker animated:YES completion:nil];