:::: MENU ::::

iOS: Obtener una imagen del carrete

5.00 avg. rating (83% score) - 1 vote

Cuando estamos creando una aplicación iOS para la que necesitamos obtener una foto del carrete de nuestro iPhone / iPad, tenemos que utilizar la clase: UIImagePickerController.

Normalmente lo haremos de la siguiente forma en nuestro controlador:

  // Preparamos el image picker
  imgPicker = [[UIImagePickerController alloc] init];
  [imgPicker setDelegate:self];

  // Establecemos el origen de la imagen (carrete)
  // Si queremos tomar una nueva imagen el valor será UIImagePickerControllerSourceTypeCamera
  [imgPicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];

  // Mostramos el control modal
  [self presentModalViewController:imgPicker animated:YES];

Una vez el control modal retorna el control a nuestro controlador (el usuario elige la imagen a utilizar), el método didFinishPickingImage del delegado (nuestro controlador) es llamado con la imagen elegida

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo { 
    // Asignamos la imagen al Image View o realizamos las operaciones que necesitemos
    imPhoto.image = img;
    // Descargamos la ventana modal
    [self dismissModalViewControllerAnimated:YES];
}

Lo anterior nos servirá si nuestra aplicación funciona únicamente en iPhone. Si queremos hacerla también funcional en iPad, debemos saber que la forma de mostrar el picker es ligeramente diferente. Para contemplas las dos opciones iPhone / iPad, podemos hacer lo siguiente.

Reemplazamos la línea:

  // Mostramos el control modal
  [self presentModalViewController:imgPicker animated:YES];

Por:

  // Diferente forma de mostrar en iPad
  if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:imgPicker];
    [popover presentPopoverFromRect:self.imPhoto.bounds inView:self.imPhoto permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    popOver = popover;
  }
  else {
    [self presentModalViewController:imgPicker animated:YES];
  }



2 Comments

Hey! Qué opinas sobre el artículo?