Skip to main content
LanguageFrançais
Ingénierie5 minutes de lectureoctobre 2026

Comment fonctionnent les animations printanières dans SwiftUI ?

Réponse courte

Dans SwiftUI, vous ajoutez un ressort avec .animation(.spring) ou withAnimation(.spring). Depuis iOS 17, les principaux paramètres sont la durée et le rebond, et il existe des préréglages : .smooth (pas de rebond), .snappy (un peu) et .bouncy (plus). Le code plus ancien utilise Response et DampingFraction. Les ressorts SwiftUI conservent leur vitesse lorsqu'une nouvelle animation les interrompt, ce qui rend les gestes naturels.

À retenir

  • Utilisez withAnimation(.spring) pour les changements d'état, ou .animation(.spring, value:) sur une vue
  • iOS 17+ : .spring(duration:bounce:) plus les préréglages .smooth, .snappy et .bouncy
  • Ancienne API : .spring(response:dampingFraction:blendDuration :)
  • Les ressorts sont le style d'animation par défaut de SwiftUI depuis iOS 17
  • Les ressorts interrompus conservent leur vitesse, ce qui permet aux gestes de se transmettre en douceur

SwiftUI anime les changements d’état. Lorsqu'une valeur telle que isExpanded change à l'intérieur de withAnimation(.spring), chaque vue qui en dépend se déplace vers sa nouvelle disposition à l'aide d'un ressort.

Dans iOS 17 et versions ultérieures, la manière la plus simple de décrire un ressort consiste à utiliser deux valeurs : la durée, à peu près le temps qu'il faut pour se stabiliser, et le rebond, le degré de dépassement. Un rebond de 0 donne un mouvement fluide sans dépassement ; des valeurs plus élevées ajoutent du rebond. Apple propose également des préréglages : .smooth, .snappy et .bouncy.

Le code plus ancien utilise .spring(response:dampingFraction:). La réponse est similaire à la durée, et une fraction d'amortissement de 1 signifie aucun rebond tandis que des valeurs inférieures ajoutent un rebond. Les deux formes décrivent le même ressort physique.

Le gros avantage des ressorts est l’interruption. Si un utilisateur appuie à nouveau ou qu'un geste de glissement met fin à l'animation, le nouveau ressort démarre à partir de la position et de la vitesse actuelles, il n'y a donc pas de saut. Pour les gestes de glissement, transmettez la vitesse du geste lorsque l'utilisateur relâche, afin que l'élément continue dans la direction dans laquelle il a été lancé.

Si le même composant doit également s'exécuter sur le Web ou sur Android, il est utile de conserver les valeurs Spring en tant que jetons de mouvement partagés. ExodeUI, que nous fabriquons, a un runtime SwiftUI, donc un composant conçu avec ses ressorts peut jouer dans SwiftUI et sur d'autres plates-formes.

Questions fréquentes

Quelle est l'animation par défaut dans SwiftUI ?

Depuis iOS 17, l'animation par défaut est un ressort fluide.

Quelle est la différence entre .snappy et .bouncy ?

.snappy s'installe rapidement avec un petit dépassement ; .bouncy dépasse davantage. .smooth n'a pas de dépassement.

Comment puis-je convertir la réponse et l'amortissementFraction en durée et en rebond ?

La réponse correspond à peu près à la durée. Une fraction d'amortissement de 1 correspond à un rebond de 0 ; des fractions d'amortissement plus faibles signifient plus de rebond.

Comment puis-je ajouter de la vitesse à partir d’un geste de glissement ?

Lisez la vitesse à la fin du glissement et utilisez un ressort d'interpolation ou les API de ressort les plus récentes qui acceptent une vitesse initiale.

Guides et exemples associés

Réglez un ressort avant d'écrire du code

Faites glisser les curseurs, observez le mouvement et copiez les valeurs de ressort pour SwiftUI, CSS et d'autres plates-formes.

Ouvrez le générateur de ressort
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 →