Partager via


Animations à effet ressort

L’article montre comment utiliser spring NaturalMotionAnimations.

Prérequis

Ici, nous partons du principe que vous connaissez les concepts abordés dans ces articles :

Pourquoi les ressorts ?

Springs est une expérience de mouvement commune que nous avons tous vécue à un moment donné dans notre vie ; allant des jouets slinky aux expériences de classe physique avec un bloc lié au printemps. Le mouvement oscillant d’un printemps encourage souvent une réponse émotionnelle ludique et légère de ceux qui l’observent. Par conséquent, le mouvement d’un printemps se traduit bien en interface utilisateur d’application pour ceux qui cherchent à créer une expérience de mouvement plus dynamique qui « pops » plus à l’utilisateur final qu’un bezier cubique traditionnel. Dans ces cas, le mouvement spring crée non seulement une expérience de mouvement plus dynamique, mais peut également aider à attirer l’attention sur le contenu nouveau ou actuellement animé. Selon la personnalisation de l’application ou le langage de mouvement, l’oscillation est plus prononcée et visible, mais dans d’autres cas, elle est plus subtile.

Mouvement avec animation de printempsMouvement avec animation bezier cubique

Utilisation de ressorts dans votre interface utilisateur

Comme mentionné précédemment, les ressorts peuvent être un mouvement utile à intégrer à votre application pour introduire une expérience d’interface utilisateur très familière et ludique. L’utilisation courante des ressorts dans l’interface utilisateur est la suivante :

Description de l’utilisation spring Exemple visuel
Faire une expérience de mouvement « pop » et regarder plus dynamique. (Animation de l’échelle) Mettre à l’échelle le mouvement avec animation de printemps
Faire une expérience de mouvement se sentir subtilement plus énergique (Animating Offset) Mouvement décalé avec animation de printemps

Dans chacun de ces cas, le mouvement de printemps peut être déclenché soit en « ressortant » et en oscillant autour d’une nouvelle valeur, soit en oscillant autour de sa valeur actuelle avec une certaine vitesse initiale.

Oscillation de l’animation de printemps

Définition de votre mouvement de printemps

Vous créez une expérience de printemps à l’aide des API NaturalMotionAnimation. Plus précisément, vous créez un SpringNaturalMotionAnimation à l’aide des méthodes Create* hors compositor. Vous pouvez ensuite définir les propriétés suivantes du mouvement :

  • DampingRatio : exprime le niveau d’amortissement du mouvement de printemps utilisé dans l’animation.
Valeur du ratio d’amortissement Description
DampingRatio = 0 Non échanté : le printemps oscille pendant longtemps
0 < DampingRatio < 1 Sous-échantillonné – le printemps oscille d’un peu à beaucoup.
DampingRatio = 1 Critiquementamped : le printemps n’effectuera aucune oscillation.
> Amortissement 1 Overdamped - le printemps atteint rapidement sa destination avec une décélération abrupte et aucune oscillation
  • Période : le temps nécessaire au printemps pour effectuer une seule oscillation.
  • Final /Valeur de départ : les positions de début et de fin définies du mouvement de printemps (s’il n’est pas défini, la valeur de départ et/ou la valeur finale seront la valeur actuelle).
  • Vitesse initiale : vitesse initiale programmatique pour le mouvement.

Vous pouvez également définir un ensemble de propriétés du mouvement identiques à KeyFrameAnimations :

  • DelayTime / Delay Behavior
  • StopBehavior

Dans les cas courants d’animation de décalage et d’échelle/taille, les valeurs suivantes sont recommandées par l’équipe windows Design pour DampingRatio et Period pour différents types de ressorts :

Propriété Printemps normal Printemps humide Printemps moins humide
Contrepartie Ratio d’amortissement = 0,8
Période = 50 ms
Ratio d’amortissement = 0,85
Période = 50 ms
Ratio d’amortissement = 0,65
Période = 60 ms
Mise à l’échelle/taille Ratio d’amortissement = 0,7
Période = 50 ms
Ratio d’amortissement = 0,8
Période = 50 ms
Ratio d’amortissement = 0,6
Période = 60 ms

Une fois que vous avez défini les propriétés, vous pouvez ensuite passer votre naturalMotionAnimation spring à la méthode StartAnimation d’un Objet CompositionObject ou à la propriété Motion d’un objet InertieModifier InteractionTracker.

Exemple

Dans cet exemple, vous créez une expérience d’interface utilisateur de navigation et de canevas dans laquelle, lorsque l’utilisateur clique sur un bouton développer, un volet de navigation est animé avec un mouvement d’oscillation springy.

Animation spring en cliquant sur

Commencez par définir l’animation spring dans l’événement cliqué pour le moment où le volet de navigation s’affiche. Vous définissez ensuite les propriétés de l’animation à l’aide de la fonctionnalité InitialValueExpression pour utiliser une expression pour définir FinalValue. Vous effectuez également le suivi de l’ouverture ou non du volet et, lorsque vous êtes prêt, démarrez l’animation.

private void Button_Clicked(object sender, RoutedEventArgs e)
{
 _springAnimation = _compositor.CreateSpringScalarAnimation();
 _springAnimation.DampingRatio = 0.75f;
 _springAnimation.Period = TimeSpan.FromSeconds(0.5);

 if (!_expanded)
 {
 _expanded = true;
 _propSet.InsertBoolean("expanded", true);
 _springAnimation.InitialValueExpression["FinalValue"] = "this.StartingValue + 250";
 } else
 {
 _expanded = false;
 _propSet.InsertBoolean("expanded", false);
_springAnimation.InitialValueExpression["FinalValue"] = "this.StartingValue - 250";
 }
 _naviPane.StartAnimation("Offset.X", _springAnimation);
}

Que se passe-t-il si tu voulais lier cette motion à l’entrée ? Par conséquent, si l’utilisateur final effectue un mouvement de balayage vers l’extérieur, les volets sortent avec un mouvement Spring ? Plus important encore, si l’utilisateur balaye plus fort ou plus rapidement, le mouvement s’adapte en fonction de la vitesse de l’utilisateur final.

Animation spring sur balayage

Pour ce faire, vous pouvez prendre notre même Animation Spring et la transmettre dans un InertieModifier avec InteractionTracker. Pour plus d’informations sur InputAnimations et InteractionTracker, consultez les expériences de manipulation personnalisées avec InteractionTracker. Nous allons supposer que pour cet exemple de code, vous avez déjà configuré votre InteractionTracker et VisualInteractionSource. Nous allons nous concentrer sur la création des InertieModifiers qui prendront dans un NaturalMotionAnimation, dans ce cas un printemps.

// InteractionTracker and the VisualInteractionSource previously setup
// The open and close ScalarSpringAnimations defined earlier
private void SetupInput()
{
 // Define the InertiaModifier to manage the open motion
 var openMotionModifer = InteractionTrackerInertiaNaturalMotion.Create(compositor);

 // Condition defines to use open animation if panes in non-expanded view
 // Property set value to track if open or closed is managed in other part of code
 openMotionModifer.Condition = _compositor.CreateExpressionAnimation(
"propset.expanded == false");
 openMotionModifer.Condition.SetReferenceParameter("propSet", _propSet);
 openMotionModifer.NaturalMotion = _openSpringAnimation;

 // Define the InertiaModifer to manage the close motion
 var closeMotionModifier = InteractionTrackerInertiaNaturalMotion.Create(_compositor);

 // Condition defines to use close animation if panes in expanded view
 // Property set value to track if open or closed is managed in other part of code
 closeMotionModifier.Condition = 
_compositor.CreateExpressionAnimation("propSet.expanded == true");
 closeMotionModifier.Condition.SetReferenceParameter("propSet", _propSet);
 closeMotionModifier.NaturalMotion = _closeSpringAnimation;

 _tracker.ConfigurePositionXInertiaModifiers(new 
InteractionTrackerInertiaNaturalMotion[] { openMotionModifer, closeMotionModifier});

 // Take output of InteractionTracker and assign to the pane
 var exp = _compositor.CreateExpressionAnimation("-tracker.Position.X");
 exp.SetReferenceParameter("tracker", _tracker);
 ElementCompositionPreview.GetElementVisual(pageNavigation).
StartAnimation("Translation.X", exp);
}

Maintenant, vous disposez à la fois d’une animation spring programmatique et pilotée par les entrées dans votre interface utilisateur !

En résumé, les étapes d’utilisation d’une animation spring dans votre application :

  1. Créez votre SpringAnimation hors de votre compositor.
  2. Définissez les propriétés de SpringAnimation si vous souhaitez des valeurs non par défaut :
    • DampingRatio
    • Période
    • Valeur finale
    • Valeur initiale
    • Vitesse initiale
  3. Affecter à la cible.
    • Si vous animez une propriété CompositionObject, passez SpringAnimation en tant que paramètre à StartAnimation.
    • Si vous souhaitez utiliser avec l’entrée, définissez la propriété NaturalMotion d’un InertieModifier sur SpringAnimation.