イージング関数

.NET マルチプラットフォーム アプリ UI (.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 クラスでも使用できます。 詳細については、「 カスタム アニメーション」を参照してください。

カスタム イージング関数

カスタム イージング関数を作成するには、主に次の 3 つの方法があります。

  1. double引数を受け取り、double結果を返すメソッドを作成します。
  2. Func<double, double>を作成します。
  3. Easing コンストラクターの引数としてイージング関数を指定します。

3 つのケースすべてで、カスタム イージング関数は 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<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 インスタンスは、最終的な位置に落ちるように調整されます。

.NET マルチプラットフォーム アプリ UI (.NET MAUI) には Easing クラスが含まれており、アニメーションの実行速度を制御する転送関数を指定できます。

Easing クラスは、アニメーションで使用できるイージング関数の数を定義します。

  • BounceInイージング関数は、最初にアニメーションをバウンスします。
  • BounceOutイージング関数は、アニメーションに最後にバウンスを与えます。
  • CubicInイージング関数は、アニメーションをゆっくりと加速します。
  • CubicInOutイージング関数は、最初のアニメーションを加速し、最後にアニメーションを減速します。
  • CubicOutイージング関数は、アニメーションをすばやく減速します。
  • Linearイージング関数は一定の速度を使用し、既定のイージング関数です。
  • SinInイージング機能により、アニメーションがスムーズに高速化されます。
  • SinInOutイージング機能は、最初のアニメーションをスムーズに加速し、最後にアニメーションをスムーズに減速します。
  • SinOutイージング関数は、アニメーションをスムーズに減速します。
  • SpringInイージング関数を使用すると、アニメーションは最後に向かって非常に迅速に加速します。
  • SpringOutイージング関数を使用すると、アニメーションはすぐに最後に向かって減速します。

InおよびOutサフィックスは、イージング関数によって提供される効果がアニメーションの先頭、末尾、またはその両方で顕著かどうかを示します。

さらに、カスタム イージング関数を作成できます。 詳細については、「 カスタム イージング関数」を参照してください。

イージング関数を使用する

ViewExtensions クラスのアニメーション拡張メソッドを使用すると、イージング関数を最後のメソッド引数として指定できます。

await image.TranslateToAsync(0, 200, 2000, Easing.BounceIn);
await image.ScaleToAsync(2, 2000, Easing.CubicIn);
await image.RotateToAsync(360, 2000, Easing.SinInOut);
await image.ScaleToAsync(1, 2000, Easing.CubicOut);
await image.TranslateToAsync(0, -200, 2000, Easing.BounceOut);

アニメーションにイージング関数を指定すると、アニメーションの速度が非線形になり、イージング関数によって提供される効果が生成されます。 アニメーションを作成するときにイージング関数を省略すると、アニメーションで既定の Linear イージング関数が使用され、線形速度が生成されます。

ViewExtensions クラスでアニメーション拡張メソッドを使用する方法の詳細については、「基本アニメーション」を参照してください。 イージング関数は、 Animation クラスでも使用できます。 詳細については、「 カスタム アニメーション」を参照してください。

カスタム イージング関数

カスタム イージング関数を作成するには、主に次の 3 つの方法があります。

  1. double引数を受け取り、double結果を返すメソッドを作成します。
  2. Func<double, double>を作成します。
  3. Easing コンストラクターの引数としてイージング関数を指定します。

3 つのケースすべてで、カスタム イージング関数は 0 から 1 の値を返す必要があります。

カスタム イージングメソッド

カスタム イージング関数は、 double 引数を受け取り、 double 結果を返すメソッドとして定義できます。

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

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

この例では、 CustomEase メソッドは、受信値を値 0、0.2、0.4、0.6、0.8、および 1 に切り捨てます。 したがって、 Image インスタンスは、スムーズではなく、個別のジャンプで変換されます。

カスタム イージング関数

カスタム イージング関数は、 Func<double, double>として定義することもできます。

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

この例では、 CustomEaseFunc はイージング関数を表します。この関数は、高速に開始され、速度が遅くなり、コースが逆になり、コースが再び反転されて、最後に向かって迅速に加速されます。 そのため、 Image インスタンスの全体的な動きは下向きですが、アニメーションの途中で一時的にコースが逆になります。

カスタムイージング構築関数

カスタム イージング関数は、 Easing コンストラクターの引数として定義することもできます。

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

この例では、カスタム イージング関数は、 Easing コンストラクターのラムダ関数引数として指定され、 Math.Cos メソッドを使用して、 Math.Exp メソッドによって減衰される低速ドロップ効果を作成します。 したがって、 Image インスタンスは、最終的な位置に落ちるように調整されます。