LongPressGesture en SwiftUI
LongPressGesture en SwiftUI

LongPressGesture en SwiftUI en Español

LongPressGesture en SwiftUI lo usamos para lanzar acciones cuando un user presiona una vista y pasan unos segundos. LongPressGesture lo podemos customizar indicando la minimumDuration y el maximumDistance

SwiftBeta
LongPressgesture en SwiftUI

Hoy en SwiftBeta vamos a aprender a usar otro gesto en SwiftUI. Vamos a aprender el LongPressGesture, este gesto sirve para detectar cuando se está pulsando una vista por un largo tiempo y realizar alguna acción.

LongPressGesture en código

Lo primero de todo que vamos hacer es crear un proyecto de cero. Y aprovechamos el código que tenemos en ContentView, para añadir el modificador onLongPressGesture al Text:

import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("¡Suscríbete a SwiftBeta!")
            .padding()
            .onLongPressGesture {
                print("Detectado un long press gesture")
            }
    }
}
Modificador .onLongPressGesture en SwiftUI

Si mantenemos pulsado el Text, vemos que aparece el mensaje de "Suscríbete a SwiftBeta" por consola.
Podríamos customizar la duración de nuestro LongPressGesture y también si queremos permiter que mientras se está pulsando, el user se mueva por la vista.

struct ContentView: View {
    var body: some View {
        Text("Hello, world!")
            .padding()
            .onLongPressGesture(minimumDuration: 3, maximumDistance: 50) {
                print("Detectado un long press gesture")
            }
    }
}
Modificamos los parámetros de .onLongPressGesture

En este caso, hemos pasado dos parámetros:

  • minimumDuration: queremos que se lance el closure del onLongPressGesture cuando el user pulse durante 3 segundos en la vista.
  • maximumDistance: permitimos al user que mientras se está pulsando la vista, se pueda mover hasta una distancia de 50 antes de que el gesto falle. (Si se mueve a más de una distancia de 50 el gesto fallará y se tendrá que volver a pulsar)

Otro ejemplo de LongPressGesture en código

Otra manera de usar el LongPressGesture es usar una instancia de él, en lugar de usar el modificador .onLongPressGesture. Vamos a ver un ejemplo:

import SwiftUI

struct ContentView: View {
    @GestureState var isDetectingLongPress = false

    var longPress: some Gesture {
        LongPressGesture(minimumDuration: 3)
            .updating($isDetectingLongPress) { currentState, gestureState,
                    transaction in
                gestureState = currentState
                transaction.animation = .easeIn(duration: 3.0)
            }
            .onEnded { _ in
                print("Suscríbete a SwiftBeta")
            }
    }

    var body: some View {
        VStack {
            Text("Mantén pulsado el rectángulo para suscribirte a SwiftBeta")
                .bold()
                .multilineTextAlignment(.center)
                .padding()
            Rectangle()
                .fill(self.isDetectingLongPress ? Color.green : Color.blue)
                .frame(width: 100, height: 100, alignment: .center)
                .gesture(longPress)
            Spacer()
        }
    }
}
Creamos propiedad con @GestureState en SwiftUI

En este caso, hemos creado una vista que al pulsar un rectángulo, el color del rectángulo va cambiando. Mientras se está pulsando el rectangulo vemos como varía de verde a azul.

Conclusión

Hemos visto lo simple que es lanzar alguna acción cuando un user toca una vista durante 3 segundos. Para ello hemos usado el LongPressGesture en SwiftUI.

Si quieres seguir aprendiendo sobre SwiftUI, Swift, Xcode, o cualquier tema relacionado con el ecosistema Apple


SwiftUI Intermedio