Captura de foto de perfil: ImagePicker y vista Sheet

Clase 33 de 36Curso de Desarrollo de Aplicaciones iOS con SwiftUI

Resumen

¿Cómo capturar la imagen de perfil de un usuario en Swift?

En el desarrollo móvil, permitir que los usuarios elijan su foto de perfil es esencial para mejorar la experiencia del usuario y personalizar apps. Usando Swift y librerías de terceros, podemos integrar un Image Picker que permite seleccionar imágenes desde la galería o la cámara. Acompáñame a descubrir cómo lograrlo y aplicar estos conocimientos a tus proyectos móviles.

¿Qué librería usar para el Image Picker?

Swift UI, a diferencia de UIKit, aún no tiene integrada de manera nativa una vista para seleccionar imágenes. Para resolver esto utilizamos la librería SUImagePickerView, que permite al usuario escoger imágenes desde su librería o directamente desde la cámara.

  1. Descargar la librería: Accede al repositorio de SUImagePickerView y descarga el proyecto.
  2. Integrar en Xcode: Arrastra y suelta el archivo SUImagePickerView en tu carpeta de vistas modelo en Xcode. Asegúrate de seleccionar la opción para copiarlo a tu proyecto.
  3. Configurar el Image Picker: En la pantalla de edición de perfil, configúralo para mostrarse cuando se presione el botón asociado.
import SUImagePickerView

struct EditProfileView: View {
    @State private var imagePerfil: Image? = Image("perfilEjemplo")
    @State private var isCameraActive: Bool = false

    var body: some View {
        VStack {
            imagePerfil?
                .resizable()
                .frame(width: 100, height: 100)
                .clipShape(Circle())
                .onTapGesture { self.isCameraActive = true }

            Sheet(isPresented: $isCameraActive) {
                SUImagePickerView(sourceType: .photoLibrary, isPresented: $isCameraActive, image: $imagePerfil)
            }
        }
    }
}

¿Cómo inicializar y controlar el Image Picker?

La imagen se inicializa usando un estado @State. Este funciona para crear una variable que sigue su modificación, lo necesario para actualizar el perfil cuando el usuario elige una nueva imagen.

  1. Crear variables necesarias: Declara imagePerfil para guardar la imagen seleccionada y isCameraActive para controlar si el selector de imágenes está activo.

  2. Mostrar el Image Picker: Implementa un modificador Sheet sobre la imagen de perfil que activa SUImagePickerView al ser presionado.

  3. Usar en simulador vs dispositivo real: Mientras que .photoLibrary funciona en el simulador, para probar .camera es necesario un dispositivo real.

¿Cómo solucionar errores comunes?

A menudo, trabajando con vistas compuestas o Sheets, podemos enfrentar errores de binding o inicialización. Aquí algunos consejos:

  • Verificadores con Self: Cuando accedes a una imagen dentro de una vista Sheet, asegúrate de utilizar self para clarificar el contexto de la propiedad.

  • Establecer valores iniciales correctos: Evita que la cámara se active por defecto; inicializa isCameraActive como false para evitar comportamientos inesperados.

Con esta implementación, puedes ofrecer una funcionalidad esencial y moderna en las aplicaciones, permitiendo a los usuarios personalizar su experiencia con imágenes desde su galería o cámara. Sigue explorando y aplicando estos principios en tus desarrollos y no olvides practicar en tus proyectos. ¡El camino de aprendizaje está lleno de posibilidades!