Поделиться через


Функции для реалистичной анимации

Многоплатформенный пользовательский интерфейс приложений .NET (.NET MAUI) включает Easing класс, позволяющий указать функцию передачи, которая определяет скорость или замедление анимации при выполнении.

Класс Easing определяет ряд функций упрощения, которые можно использовать анимацией:

  • Функция BounceIn упрощения отскакивает анимацию в начале.
  • Функция BounceOut упрощения отскакивает анимацию в конце.
  • Функция CubicIn упрощения медленно ускоряет анимацию.
  • Функция CubicInOut упрощения ускоряет анимацию в начале и уменьшает анимацию в конце.
  • Функция CubicOut упрощения быстро уменьшает анимацию.
  • Функция Linear упрощения использует константную скорость и является функцией упрощения по умолчанию.
  • Функция SinIn упрощения плавно ускоряет анимацию.
  • Функция SinInOut упрощения плавно ускоряет анимацию в начале и плавно уменьшает анимацию в конце.
  • Функция SinOut упрощения плавно уменьшает анимацию.
  • Функция SpringIn упрощения приводит к тому, что анимация очень быстро ускоряется к концу.
  • Функция SpringOut упрощения приводит к быстрому замедлению анимации в конце.

И In Out суффиксы указывают, заметны ли эффект, предоставляемый функцией упрощения, в начале анимации, в конце или обоих.

Кроме того, можно создать пользовательские функции упрощения. Дополнительные сведения см. в разделе "Пользовательские функции упрощения".

Использование функции упрощения

Методы расширения анимации в классе позволяют указать функцию упрощения в ViewExtensions качестве окончательного аргумента метода:

await image.TranslateTo(0, 200, 2000, Easing.BounceIn);
await image.ScaleTo(2, 2000, Easing.CubicIn);
await image.RotateTo(360, 2000, Easing.SinInOut);
await image.ScaleTo(1, 2000, Easing.CubicOut);
await image.TranslateTo(0, -200, 2000, Easing.BounceOut);

Указав функцию упрощения для анимации, скорость анимации становится нелинейной и создает эффект, предоставляемый функцией упрощения. Опущение функции упрощения при создании анимации приводит к тому, что анимация использует функцию упрощения по умолчанию Linear , которая создает линейную скорость.

Дополнительные сведения об использовании методов расширения анимации в классе см. в ViewExtensions разделе "Базовая анимация". Функции упрощения также можно использовать классом Animation . Дополнительные сведения см. в разделе "Настраиваемая анимация".

Пользовательские функции упрощения

Существует три основных подхода к созданию пользовательской функции упрощения.

  1. Создайте метод, который принимает double аргумент и возвращает double результат.
  2. Создайте Func<double, double>.
  3. Укажите функцию упрощения в качестве аргумента конструктора Easing .

Во всех трех случаях пользовательская функция упрощения должна возвращать значение от 0 до 1.

Настраиваемый метод упрощения

Пользовательская функция упрощения может быть определена как метод, который принимает double аргумент, и возвращает double результат:

double CustomEase (double t)
{
  return t == 0 || t == 1 ? t : (int)(5 * t) / 5.0;
}

await image.TranslateTo(0, 200, 2000, (Easing)CustomEase);

В этом примере CustomEase метод усечет входящее значение до значений 0, 0.2, 0.4, 0.6, 0.8 и 1. Таким образом, Image экземпляр преобразуется в дискретные переходы, а не гладко.

Пользовательское упрощение func

Пользовательская функция упрощения также может быть определена как :Func<double, double>

Func<double, double> CustomEaseFunc = t => 9 * t * t * t - 13.5 * t * t + 5.5 * t;
await image.TranslateTo(0, 200, 2000, CustomEaseFunc);

В этом примере представляет функцию упрощения, CustomEaseFunc которая начинается быстро, замедляет и изменяет курс, а затем снова меняет курс, чтобы ускориться быстро к концу. Таким образом, в то время как общее перемещение экземпляра Image вниз, оно также временно изменяет курс на полпути анимации.

Конструктор пользовательского упрощения

Пользовательская функция упрощения также может быть определена в качестве аргумента конструктора Easing :

await image.TranslateTo(0, 200, 2000, new Easing (t => 1 - Math.Cos (10 * Math.PI * t) * Math.Exp (-5 * t)));

В этом примере пользовательская функция упрощения указывается в качестве лямбда-аргумента Easing функции конструктору и использует Math.Cos метод для создания эффекта медленного падения, который омрачается методом Math.Exp . Таким образом, экземпляр преобразуется таким образом, чтобы он, как представляется, Image падал на его окончательную позицию.