Reproducir haptic feedback en SwiftUI
Misael Cuevas
28 agosto, 20232min de lectura
Haptic feedback o retroalimentación háptica en español, es un método de comunicación táctil utilizado por los dispositivos para notificar eventos a los usuarios. En los dispositivos Apple, los haptics feedbacks son representados por sensaciones de vibración y/o señales de audio que aumentan la experiencia del usuario en aplicaciones con estas características, logrando que sean más intuitivas, naturales y más accesibles a usuarios en situaciones de discapacidad.
Durante el WWDC23, Apple presentó un nuevo modificador denominado sensoryFeedback(_:trigger:)
, el cual simplifica la generación de haptic feedbacks en SwiftUI. Esto representa un avance con respecto a la forma que habíamos explicado en un artículo anterior.
Puedes reproducir un haptic feedback a partir del cambio de estado de una variable:
import SwiftUIstruct ContentView: View {@State private var playHaptic = falsevar body: some View {Button("Play haptic feedback") {playHaptic.toggle()}.sensoryFeedback(.success, trigger: playHaptic)}}
Ten en cuenta que no podrás reproducir haptic feedbacks en el simulador; necesitas un dispositivo físico para hacerlo.
Este código muestra una vista de SwiftUI que contiene:
- Una variable de estado
playHaptic
que indica cuándo se debe de reproducir el feedback. - Un
Button
que, al presionarlo, cambiará el estado de la variableplayHaptic
. Además, este botón posee el modificadorsensoryFeedback(_:trigger:)
que reproducirá el hapticsuccess
cuando cambie de estado deplayHaptic
.
El modificador sensoryFeedback
hace uso de la estructura (struct) SensoryFeedback para representar los distintos tipos de feedbacks que se pueden reproducir. En el ejemplo anterior, se utilizó el feedback .success
para indicar que que una tarea o acción se completó. Existen otros feedbacks dentro de esta estructura:
start
ystop
indican que una actividad ha iniciado o detenido.alignment
,decrease
,increase
,levelChange
yselection
para indicar cambios o selecciones de un valor u objeto.success
,warning
yerror
se utilizan para indicar un resultado de una operación.impact
,impact(weight:intensity:)
yimpact(flexibility:intensity:)
para indicar un impacto físico entre elementos de UI.
Hay otras opciones con las cuales puedes crear sensoryFeedback
de manera más personalizada:
sensoryFeedback(trigger:_:)
para reproducir diferentes tipos de feedbacks según los diversos estados de la variable que activa el modificador.sensoryFeedback(_:trigger:condition:)
para reproducir un feedback cuando cambie el estado de tu variable de acuerdo con las condiciones que especifiques.
Te recomiendo consultar la guía de interfaces de Apple para conocer las mejores prácticas al utilizar haptic feedbacks.