with uiimagepickercontrollerdelegate open example ios iphone ios6 ios7 uiimagepickercontroller

ios - uiimagepickercontrollerdelegate - ¿Cómo configurar una foto tomada con UIImagePickerController para ser visto/modificado en un UIViewController personalizado?



uiimagepickercontrollerdelegate swift 4 (3)

Actualmente estoy usando el UIImagePickerController predeterminado, e inmediatamente después de tomar una foto, se muestra la siguiente pantalla predeterminada:

Mi pregunta es, ¿cómo podría usar mi propio UIViewController para ver la imagen resultante (y por lo tanto omitir esta pantalla de confirmación).
Tenga en cuenta que no estoy interesado en utilizar una superposición personalizada para el UIImagePicker con controles de cámara personalizados o imágenes de la galería de fotos, sino solo omitir esta pantalla y asumir que la foto tomada es lo que el usuario hubiera deseado.

¡Gracias!


Puede personalizar el controlador de vista del selector de imágenes usando una vista de superposición.

Lea la documentación aquí .

Configura una nueva vista, la configura como la superposición de la cámara, le dice al selector de imágenes que no muestre sus propios controles y que muestre el selector.

Dentro de su código de superposición, llame a takePicture imagen en el controlador de vista del selector de imágenes para finalmente tomar la imagen cuando esté listo.

Apple tiene un ejemplo de esto aquí: https://developer.apple.com/library/ios/samplecode/PhotoPicker/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010196-Intro-DontLinkElementID_2

Para las transformaciones, puede usar la propiedad cameraViewTransform para establecer las transformaciones que se utilizarán al tomar la imagen.


Después de tomar la foto, se llamaría al método de delegado:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

En este método, descarta el imagePickerController. Usted tiene acceso a la imagen, por lo que puede jugar con la imagen, posiblemente mostrarla en un UIImageView. Entonces el código sería algo como esto:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [self dismissViewControllerAnimated:YES completion:nil]; if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) { //here you have access to the image UIImage *pickedImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; //Create an instance of a view controller and show the UIImageView or do your stuff there. According to you business logic. } }


Pruebe este código para mantener su imagen resultante en el mismo tamaño:

Primero crea IBOutlet para UIImageview .

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSString *mediaType = info[UIImagePickerControllerMediaType]; [self dismissViewControllerAnimated:YES completion:nil]; if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { OriginalImage=info[UIImagePickerControllerOriginalImage]; image = info[UIImagePickerControllerOriginalImage]; //---------- imageview.image = image; // additional method [self resizeImage]; //--------- if (_newMedia) UIImageWriteToSavedPhotosAlbum(image,self,@selector(image:finishedSavingWithError:contextInfo:),nil); } else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) { // Code here to support video if enabled } } //---- Resize the original image ---------------------- -(void)resizeImage { UIImage *resizeImage = imageview.image; float width = 320; float height = 320; CGSize newSize = CGSizeMake(320,320); UIGraphicsBeginImageContextWithOptions(newSize,NO,0.0); CGRect rect = CGRectMake(0, 0, width, height); float widthRatio = resizeImage.size.width / width; float heightRatio = resizeImage.size.height / height; float divisor = widthRatio > heightRatio ? widthRatio : heightRatio; width = resizeImage.size.width / divisor; height = resizeImage.size.height / divisor; rect.size.width = width; rect.size.height = height; //indent in case of width or height difference float offset = (width - height) / 2; if (offset > 0) { rect.origin.y = offset; } else { rect.origin.x = -offset; } [resizeImage drawInRect: rect]; UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); imageview.image = smallImage; imageview.contentMode = UIViewContentModeScaleAspectFit; }