Captura de foto de perfil con la cámara: modificar librerías de terceros
Clase 34 de 36 • Curso de Desarrollo de Aplicaciones iOS con SwiftUI
Resumen
¿Cómo guardar imágenes capturadas en un dispositivo iOS?
El desarrollo para iOS a menudo implica trabajar con imágenes, ya sea almacenándolas o recuperándolas para su visualización. Una característica común que muchos desarrolladores necesitan implementar es la capacidad de guardar las imágenes capturadas o seleccionadas por el usuario en la memoria del dispositivo. Este tutorial te guiará a través del proceso de adaptar una librería de terceros para lograr este objetivo. Aprenderás cómo hacerlo utilizando Swift y las clases proporcionadas por el kit de desarrollo de iOS.
¿Cuál es la relevancia de modificar el controlador de imágenes?
El primer paso para guardar imágenes en el dispositivo es modificar nuestro controlador de imágenes. En este caso, estamos usando una clase importada, SUImagePickerView
, que permite al usuario seleccionar imágenes desde la librería guardada en su dispositivo o capturarlas con la cámara.
Para comenzar, debemos identificar la función imagePickerController
, normalmente localizada alrededor de la línea 45 del código. Aquí es donde se recupera la imagen que el usuario ha seleccionado o capturado. Nuestro objetivo es guardar esta imagen en la memoria flash del dispositivo.
¿Cómo renombrar constantes para una mejor claridad?
Por claridad es crucial renombrar las constantes. La constante, normalmente llamada self.imageView
, no se usará directamente. Por ello, cambiamos su denominación a UIImage
para delinear claramente este objeto como un tipo de UIImage
de UIKit.
let image = UIImage() // Cambiamos el nombre para claridad
¿Cómo convertir y guardar la imagen como PNG?
La clave aquí es capturar la información de la imagen en un formato de PNG para almacenarla correctamente. Para lograrlo, usamos lo siguiente:
if let data = UIImage.pngData() {
// Guardar la imagen aquí
}
El uso de una estructura if let
nos permite manejar de manera segura la posible ausencia de datos. Al encapsular todo el procesamiento de la imagen dentro de una estructura condicional, garantizamos que las operaciones subsiguientes no se rompan si los datos no existen.
¿Dónde almacenar la imagen en el dispositivo?
Para guardar la imagen, crearemos una constante que nos dará acceso al directorio adecuado para almacenar documentos en el dispositivo del usuario. Utilizaremos el fileManager
para esto:
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
Con esta línea, accedemos al directorio de documentos, el lugar recomendado donde guardar archivos permanentes. Este acceso nos permite definir la ubicación exacta donde la imagen se almacenará.
¿Cómo definir la ruta completa del archivo?
Una vez que tenemos el acceso al directorio, necesitamos definir la ruta completa del archivo incorporando un nombre para la imagen que vamos a guardar:
let fileURL = documentsDirectory.appendingPathComponent("fotoPerfil.png")
Esta ruta es similar a tener una ubicación en tu sistema operativo de escritorio donde deseas guardar un archivo, garantizando que la imagen tenga no solo un lugar de almacenamiento designado sino también un nombre claro.
¿Cómo manejar errores al guardar archivos?
Es crucial prever y manejar los posibles errores al guardar la imagen. Esto se logra mediante una estructura de do-catch
en Swift:
do {
try data.write(to: fileURL)
} catch {
print("No pude guardar la fotografía en el folder del dispositivo con error: \(error)")
}
Usando la estructura do-catch
, intentamos guardar los datos en la URL especificada. Si ocurre algún error durante el proceso, el manejo del error con catch
nos proporciona la capacidad de recibir y entender los errores, asegurando que el flujo de la aplicación pueda continuar o que podamos informar adecuadamente del problema al desarrollador o al usuario.
Con estas modificaciones, ahora tenemos la capacidad de guardar imágenes seleccionadas o capturadas por el usuario en su dispositivo. El siguiente desafío será recuperar y mostrar estas imágenes en la pantalla de perfil, lo que se explorará en una próxima lección.