Uso de la Cámara del iPhone para Adjuntar Fotos en Posts

Clase 32 de 52Curso de Desarrollo de Apps para iOS

Contenido del curso

Tu primera app en iOS

Proyecto: PlatziTweets

Resumen

Integrar la cámara del iPhone en una aplicación iOS es un paso fundamental para enriquecer la experiencia del usuario. Poder tomar fotos y adjuntarlas a publicaciones requiere configurar permisos, manejar el estado de las imágenes y controlar la calidad para que el contenido no resulte demasiado pesado. A continuación se explican los pasos esenciales para lograrlo directamente desde el código.

¿Cómo solicitar permisos de cámara en iOS?

Antes de acceder al hardware del dispositivo, es obligatorio declarar el permiso correspondiente. Para ello se trabaja con el archivo info.plist, que almacena las configuraciones generales de la aplicación. Se abre como código fuente y se agrega la llave NSCameraUsageDescription [01:10]. Esta llave debe acompañarse de un string que describa al usuario por qué la app necesita acceso a la cámara, por ejemplo: "Usaremos la cámara para publicar tu tweet".

Este paso no es opcional. Apple puede rechazar una aplicación que utilice la cámara sin incluir el texto del permiso. Es una política estricta de privacidad que protege al usuario y que todo desarrollador debe respetar.

¿Cómo configurar el UIImagePickerController para abrir la cámara?

El componente central es UIImagePickerController, un controlador nativo de iOS que permite capturar fotos o videos. Se declara como una propiedad privada y opcional dentro del ViewController [03:22]:

swift private var imagePicker: UIImagePickerController?

Dentro de un método llamado openCamera, se crea la instancia y se configuran varias propiedades importantes:

  • sourceType: define la fuente de información. Puede ser la cámara, la librería de fotos o las fotos guardadas. En este caso se selecciona .camera [04:30].
  • cameraFlashMode: controla si el flash está activo o no al abrir la cámara. Se puede alternar entre .on y .off [04:50].
  • cameraCaptureMode: establece el modo de captura, que puede ser .photo o .video [05:07].
  • allowsEditing: cuando está en true, permite al usuario recortar la imagen después de tomarla [05:22].
  • delegate: se asigna self para controlar cuándo se toma o se cancela la foto [05:35].

Para presentar la cámara al usuario se utiliza un guard let que verifica que el imagePicker se haya instanciado correctamente. Si todo sale bien, se presenta con el método present [06:10]:

swift guard let imagePicker = imagePicker else { return } present(imagePicker, animated: true, completion: nil)

¿Qué es el preview de la foto y cómo mostrarlo?

Antes de configurar la cámara, se agrega un UIImageView llamado previewImageView al stack de la interfaz [02:05]. Este componente muestra una vista previa de la foto tomada. Se le asigna una altura mínima de doscientos puntos y se marca como hidden para que no aparezca vacío antes de capturar una imagen [02:55].

¿Cómo conectar el botón para abrir la cámara?

Se añade un botón con el texto "Abrir Cámara" y se crea un IBAction llamado openCameraAction [03:40]. Dentro de esa acción simplemente se llama al método openCamera, separando la lógica de la interfaz de la lógica de negocio.

¿Cómo implementar el delegate para obtener la foto capturada?

El protocolo UIImagePickerControllerDelegate se implementa en una extensión del ViewController, junto con UINavigationControllerDelegate, que también es requerido [06:38]. El método clave es didFinishPickingMediaWithInfo [07:05], que se dispara cuando el usuario termina de seleccionar o tomar una foto.

El parámetro info es un diccionario con llaves y valores. Para verificar que se recibió una imagen, se consulta si existe la llave .originalImage [07:30]:

swift if let image = info[.originalImage] as? UIImage { previewImageView.isHidden = false previewImageView.image = image }

Con esto se hace visible el preview y se asigna la imagen capturada. Finalmente, es necesario cerrar la cámara llamando a dismiss sobre el imagePicker [08:25]:

swift imagePicker?.dismiss(animated: true, completion: nil)

Dominar el uso de UIImagePickerController, la gestión de permisos con NSCameraUsageDescription y la implementación de delegates mediante extensiones son habilidades esenciales para cualquier desarrollador iOS. Si alguno de estos conceptos te resulta nuevo, experimenta modificando las propiedades del picker y observa cómo cambia el comportamiento de la cámara. ¿Qué configuración te funcionó mejor? Comparte tu experiencia en los comentarios.