UIImagePicker permite editar atascado en el centro

Tengo un UIImagePicker que funciona perfecto para un tipo de UIImagePickerControllerSourceTypePhotoLibrary, pero cuando uso UIImagePickerControllerSourceTypeCamera, el cuadro de edición no puede moverse desde el centro de la image. Entonces, si la image es más alta que ancha, el usuario no puede mover el cuadro de edición al cuadrado superior de la image.

¿Alguien sabe por qué este sería el caso? Solo sucede cuando la fuente proviene de la camera, no de la biblioteca.

Editar: ¡Algún CÓDIGO!

if (actionSheet.tag == 2) { if (buttonIndex == 0) { // Camera // Check for camera if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == YES) { // Create image picker controller UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; // Set source to the camera imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; imagePicker.allowsEditing = YES; // Delegate is self imagePicker.delegate = self; // Show image picker [self presentViewController:imagePicker animated:YES completion:^(void) { }]; } } else if (buttonIndex == 1) { // Photo Library if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary] == YES) { // Create image picker controller UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; // Set source to the camera imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; imagePicker.allowsEditing = YES; // Delegate is self imagePicker.delegate = self; // Show image picker [self presentViewController:imagePicker animated:YES completion:^(void) { }]; } } 

Como puede ver, les muestro exactamente lo mismo, pero la edición de la camera actúa de manera diferente a la edición de la biblioteca fotográfica.

Parece que este comportamiento es solo un error en iOS 6 … Básicamente, no puedes mover el cuadro de edición, siempre vuelve al medio a less que te acerques un poco. Espero que solucionen eso pronto.

Este es el comportamiento pnetworkingeterminado del Controlador del selector de image, no puede cambiarlo. La única otra opción es crear su propia utilidad de recorte. Mira el siguiente enlace para ver un ejemplo:

https://github.com/ardalahmet/SSPhotoCropperViewController

Lo sé, esta no es una buena solución, pero funciona.

Probé en iOS8 + iPhone5, iOS9 + iPhone6sPlus, iOS10 + iPhone6, iOS10 + iPhone6sPlus.

PRECAUCIÓN : PLImageScrollView y PLCropOverlayCropView son classs INDOCUMENTADAS .

 - (void)showImagePickerControllerWithSourceType:(UIImagePickerControllerSourceType)sourceType { UIImagePickerController *imagePickerController = [UIImagePickerController new]; imagePickerController.sourceType = sourceType; imagePickerController.mediaTypes = @[(NSString *)kUTTypeImage]; imagePickerController.allowsEditing = YES; imagePickerController.delegate = self; [self presentViewController:imagePickerController animated:YES completion:^{ [self fxxxImagePickerController:imagePickerController]; }]; } - (void)fxxxImagePickerController:(UIImagePickerController *)imagePickerController { if (!imagePickerController || !imagePickerController.allowsEditing || imagePickerController.sourceType != UIImagePickerControllerSourceTypeCamera) { return; } // !!!: UNDOCUMENTED CLASS Class ScrollViewClass = NSClassFromString(@"PLImageScrollView"); Class CropViewClass = NSClassFromString(@"PLCropOverlayCropView"); [imagePickerController.view eachSubview:^BOOL(UIView *subview, NSInteger depth) { if ([subview isKindOfClass:CropViewClass]) { // 0. crop rect position subview.frame = subview.superview.bounds; } else if ([subview isKindOfClass:[UIScrollView class]] && [subview isKindOfClass:ScrollViewClass]) { BOOL isNewImageScrollView = !self->_imageScrollView; self->_imageScrollView = (UIScrollView *)subview; // 1. enable scrolling CGSize size = self->_imageScrollView.frame.size; CGFloat inset = ABS(size.width - size.height) / 2; self->_imageScrollView.contentInset = UIEdgeInsetsMake(inset, 0, inset, 0); // 2. centering image by default if (isNewImageScrollView) { CGSize contentSize = self->_imageScrollView.contentSize; if (contentSize.height > contentSize.width) { CGFloat offset = round((contentSize.height - contentSize.width) / 2 - inset); self->_imageScrollView.contentOffset = CGPointMake(self->_imageScrollView.contentOffset.x, offset); } } } return YES; }]; // prevent re-layout, maybe not necessary @weakify(self, imagePickerController); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ @strongify(self, imagePickerController); [self fxxxImagePickerController:imagePickerController]; }); } 

EDIT : El método eachSubview: método atraviesa todo el tree de subvistas.

Una solución que lo resolvió es agregar una input en info.plist con " Ver la apariencia de la barra de estado basada en el controller " establecida en NO