
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
Tabla de contenido

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")
}
}
}
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")
}
}
}
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()
}
}
}
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.