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;
}