Skip to main content
LanguageEspañol
Ingeniería5 minutos de lecturaOctubre 2026

¿Cómo funcionan las animaciones de primavera en SwiftUI?

Respuesta corta

En SwiftUI agregas un resorte con .animation(.spring) o withAnimation(.spring). Desde iOS 17, las configuraciones principales son duración y rebote, y hay ajustes preestablecidos: .smooth (sin rebote), .snappy (un poco) y .bouncy (más). El código anterior usa respuesta y amortiguaciónFracción. Los resortes SwiftUI mantienen su velocidad cuando una nueva animación los interrumpe, lo que hace que los gestos se sientan naturales.

Idea clave

  • Utilice withAnimation(.spring) para cambios de estado, o .animation(.spring, value:) en una vista
  • iOS 17+: .spring(duración:bounce:) más ajustes preestablecidos .smooth, .snappy y .bouncy
  • API anterior: .spring(response:dampingFraction:blendDuration:)
  • Los resortes son el estilo de animación predeterminado de SwiftUI desde iOS 17
  • Los resortes interrumpidos mantienen su velocidad, por lo que los gestos se transmiten suavemente

SwiftUI anima los cambios de estado. Cuando un valor como isExpanded cambia dentro de withAnimation(.spring), cada vista que depende de él se mueve a su nuevo diseño usando un resorte.

En iOS 17 y versiones posteriores, la forma más sencilla de describir un resorte es con dos valores: duración, aproximadamente cuánto tiempo tarda en asentarse, y rebote, cuánto se sobrepasa. Un rebote de 0 proporciona un movimiento suave sin sobrepasos; los valores más altos añaden rebote. Apple también proporciona ajustes preestablecidos: .smooth, .snappy y .bouncy.

El código anterior usa .spring(response:dampingFraction:). La respuesta es similar a la duración, y una fracción de amortiguación de 1 significa que no hay rebote, mientras que los valores más bajos añaden rebote. Ambas formas describen el mismo resorte físico.

La gran ventaja de los resortes es la interrupción. Si un usuario vuelve a tocar o un gesto de arrastre finaliza en mitad de la animación, el nuevo resorte comienza desde la posición y velocidad actuales, por lo que no hay salto. Para los gestos de arrastre, pase la velocidad del gesto cuando el usuario lo suelta, de modo que el elemento continúe en la dirección en la que fue lanzado.

Si el mismo componente también necesita ejecutarse en la web o en Android, es útil mantener los valores de Spring como tokens de movimiento compartidos. ExodeUI, que fabricamos, tiene un tiempo de ejecución SwiftUI, por lo que un componente diseñado con sus resortes puede funcionar en SwiftUI y en otras plataformas.

Preguntas frecuentes

¿Cuál es la animación predeterminada en SwiftUI?

Desde iOS 17, la animación predeterminada es un resorte suave.

¿Cuál es la diferencia entre .snappy y .bouncy?

.snappy se estabiliza rápidamente con un pequeño exceso; .bouncy se sobrepasa más. .smooth no tiene exceso.

¿Cómo convierto la respuesta y la fracción de amortiguación en duración y rebote?

La respuesta se corresponde aproximadamente con la duración. Una fracción de amortiguación de 1 es un rebote 0; fracciones de amortiguación más bajas significan más rebote.

¿Cómo agrego velocidad con un gesto de arrastre?

Lea la velocidad cuando termina el arrastre y use un resorte de interpolación o las API de resorte más nuevas que aceptan una velocidad inicial.

Guías y ejemplos relacionados

Sintonice un resorte antes de escribir código

Arrastre los controles deslizantes, observe el movimiento y copie los valores de los resortes para SwiftUI, CSS y otras plataformas.

Abra el generador de resorte.
ExodeUI

EXODEUI DESKTOP

A little space for good ideas.

Choose your platform to get the official ExodeUI installer.

Looking for Intel Mac or other builds? Explore the web studio or check all download options.

Prefer the browser? Try for free in your browser →