React Native でアニメーション化された値を分数なしで解析する

Animated values

React Native でアニメーション化された値を解析する方法を理解する

ネイティブに反応する API は強力なアニメーション ツールを提供し、開発者がシームレスなトランジションと動的なビジュアルを構築できるようにします。ただし、開発者が頻繁に遭遇する問題の 1 つは、アニメーション値の出力の構造化です。

Animated.Text を使用する場合、値には小数整数が含まれる場合がありますが、これはすべての使用シナリオにとって望ましいとは限りません。たとえば、分数ではなく整数値を表示することは、特にプログレス バーやボリューム表示では一般的な要件です。

この投稿では、React Native でアニメーション データを解釈し、整数としてフォーマットする方法を説明します。これらのアイデアを使用して典型的な解析の課題を解決する方法の例を見ていきます。

また、組み込みの場合に必要な出力を取得するために、他のライブラリや方法論を使用するなどの代替案も検討します。 正常に機能しません。

指示 使用例
Animated.sequence() この関数は、次々に再生される一連のアニメーションを生成します。これは、ミリリットル レベル間のアニメーションなどの複雑な遷移に必要な、多くのアニメーションをチェーンするのに便利です。
Animated.timing() このコマンドは、タイミングベースのアニメーションを生成するために使用されます。この例では、設定された期間にわたって ml の値をアニメーション化するために使用され、値が所定のレベル間でスムーズに流れるようにします。
Easing.bezier() このコマンドは、カスタム イージング カーブを作成するためのものです。これにより、さまざまな場所でアニメーションの速度を正確に制御できるようになり、より現実的またはユニークなトランジションが実現します。
useAnimatedStyle() 共有アニメーション変数を使用してスタイルを更新できるようにする React Native Reanimated に固有のフック。アニメーション化された値を視覚要素に動的にバインドします。
withSequence() Reanimated ライブラリのコマンド。多数のアニメーションを連続的にチェーンすることができます。Animated.sequence() に相当しますが、Reanimated API 用に最適化されています。
useSharedValue() このフックは、アニメーションの共有値を作成および管理します。これは、アニメーション プロパティがスムーズに更新されることを保証する Reanimated の機能です。
interpolate() このメソッドは入力値を出力値に変換し、範囲に従ってアニメーション化された値を変更できるようにします。これは、アニメーション化されたミリリットル値を整数への丸めなど、使用可能な形式に変換するために不可欠です。
toFixed() JavaScript toFixed() メソッドは、数値を指定された小数点以下の桁数に丸めます。このシナリオでは、精度をゼロに設定してアニメーション値を整数に変換するために使用されます。

React Native でのアニメーション値の解析の最適化

上記のコード例は、React Native でアニメーション値を整数として解釈して表示する方法を示しています。 API。最初の例では、React Native の「Animated.sequence()」メソッドと「Animated.timing()」メソッドを使用して、所定のレベル間で数値をアニメーション化しました。このアニメーション シーケンスは参照値を更新し、その後、「Animated.Text」コンポーネントを使用して表示されます。ただし、アニメーション値は通常、浮動小数点数として返されるため、整数に変換することが困難になります。

この解決策は、「interpolate()」と「toFixed(0)」を利用して、アニメーションの数値が表示される前に最も近い整数に丸められるようにすることで構成されます。この場合、補間はアニメーションの入力範囲 (0 ~ 1000 など) を定義された出力範囲にマッピングできるため、非常に便利です。これにより、レベル間をシームレスに移行しながら、値が正しい範囲内に維持されることが保証されます。 「toFixed(0)」を使用すると、小数精度がゼロに設定され、基本的に数値が整数に丸められます。

2 番目の解決策では、 パッケージは、React Native でアニメーションを処理するためのより包括的な API を提供します。 Reanimated には、より効率的で応答性の高いアニメーションを可能にする「useSharedValue()」や「useAnimatedStyle()」などのフックが含まれています。このメソッドでは、「withSequence()」関数と「withTiming()」関数を連鎖させてアニメーション値を更新し、状態間のスムーズな遷移を提供します。ここでの主な利点は、特により複雑なアニメーションを操作する場合に、Reanimated によって提供されるパフォーマンスの最適化です。

どちらの場合も、エラー管理とパフォーマンスの最適化が重要です。ネイティブ ドライバーをスキップし (テキストなどの非変換プロパティを処理しているため)、一連のアニメーションをチェーンすることで、アニメーションが効率的に実行されるようにします。さらに、すべてのアニメーション値は、「useRef()」と「useEffect()」を使用して React ライフサイクル内で管理されます。これにより、コンポーネントがインストールまたは更新されたときに、アニメーションが適切に開始および更新されることが保証されます。どちらのアプローチもモジュール式で再利用可能なため、滑らかで非分数のアニメーション化された数値を必要とするアプリケーションに適しています。

React Native でアニメーション化された値を整数に解析する

アニメーション API と React フックを使用した React Native

import { Animated, Easing } from 'react-native';
import React from 'react';
export default function Milliliters() {
  const ML_LEVELS = [240, 50, 190];
  const ml = React.useRef(new Animated.Value(ML_LEVELS[0])).current;
  const ml_up_down = () => {
    Animated.sequence([
      Animated.timing(ml, {
        duration: 2000,
        toValue: ML_LEVELS[1],
        easing: Easing.bezier(0.55, 0.5, 0.45, 0.5),
        useNativeDriver: false,
      }),
      Animated.timing(ml, {
        duration: 2000,
        toValue: ML_LEVELS[2],
        easing: Easing.ease,
        useNativeDriver: false,
      }),
    ]).start();
  };
  return (
    <Animated.Text>{ml.interpolate({
      inputRange: [0, 1000],
      outputRange: ['0', '1000'],
      extrapolate: 'clamp',
    }).toFixed(0)}</Animated.Text>
  );
}

代替解決策: 解析に外部ライブラリを使用する

蘇生されたライブラリを使用してネイティブに反応する

import Animated, { Easing } from 'react-native-reanimated';
import React from 'react';
export default function Milliliters() {
  const ML_LEVELS = [240, 50, 190];
  const ml = useSharedValue(ML_LEVELS[0]);
  const ml_up_down = () => {
    ml.value = withSequence(
      withTiming(ML_LEVELS[1], { duration: 2000, easing: Easing.bezier(0.55, 0.5, 0.45, 0.5) }),
      withTiming(ML_LEVELS[2], { duration: 2000, easing: Easing.ease })
    );
  };
  const animatedText = useAnimatedStyle(() => {
    return { text: Math.round(ml.value) };
  });
  return (
    <Animated.Text style={animatedText}></Animated.Text>
  );
}

React Native でのアニメーション値の解析の簡素化

でのアニメーションの操作 特に次のようなコンポーネントでは 、出力値を適切に処理する必要があります。 React Native ですが、 API は広範なアニメーション機能を提供しますが、アニメーション値が浮動小数点数になる場合があります。これらの小数値は、進行状況バーやカウンターなど、完全な数値のみが必要な状況では問題になる可能性があります。これを克服するために、開発者はアニメーションの滑らかさを維持しながらアニメーション データを変換または丸める方法を必要とします。

1 つのオプションは、 これは、アニメーション値の入力範囲を出力範囲にマップし、アニメーション値の表示方法を制御できるようにする手法です。出力レンジを組み合わせることで、 に示されている値が保証されることを保証します。 は常に整数です。この組み合わせにより、アニメーションの整合性が維持され、ユーザーフレンドリーで視覚的に正確な出力が保証されます。

さらに、次のようなライブラリを使用すると、 アニメーション データを扱う際の柔軟性が向上します。 Reanimated は、React Native の組み込み API よりも効率的で宣言的なアニメーションをサポートしているため、複雑なアニメーション管理には理想的な選択肢です。使用する そして次のような機能 そして withSequence これにより、開発者はパフォーマンスを向上させ、遅延を最小限に抑え、アニメーションとその出力をより正確に制御できるようになります。

  1. アニメーション値を整数に変換する最良の方法は何ですか?
  2. 理想的な方法は次のとおりです。 そして 整数を最も近い整数に丸めます。
  3. なぜそうなるのか アニメーション値を使用できない場合は、
  4. React Native では、次のような手法を使用してアニメーション値を変更する必要があります。 を使用して直接処理するのではなく、 。
  5. できる アニメーションで整数値を処理するために使用できますか?
  6. はい、付きます 、あなたは利用することができます そして 整数値をスムーズに処理および表示するため。
  7. とは何ですか この文脈では何に使われますか?
  8. アニメーション値を構成可能な出力範囲にマップし、アニメーションを保持しながら整数としてフォーマットできるようにします。
  9. React Native を使用する場合と比べてパフォーマンスに違いはありますか? APIと ?
  10. はい、 最適化されたアニメーション処理と共有データにより、複雑なアニメーションのパフォーマンスが向上します。

動的ディスプレイを備えたユーザー インターフェイスを構築する場合、アニメーション値を整数に変換することが重要です。のようなメソッドを使用する 提示された数値に端数を含まないシームレスな移行が可能になります。

の使用 このライブラリを使用すると、開発者はアニメーションをより効率的に管理できるようになり、パフォーマンスと制御が向上します。適切なアプローチの選択は、アニメーションの複雑さと必要な精度のレベルによって決まります。

  1. この記事で使用した例を詳しく説明し、React Native でのアニメーション値の解析を示します。ソースを確認してください アニメーション値の解析例
  2. アニメーションの問題を解決するために参照された React Native Animated API に関する情報を提供します。完全なドキュメントは次の場所で入手できます React Native アニメーション API
  3. Reanimated Library のリファレンス。複雑なアニメーションを処理するための代替ソリューションを提供します。公式ライブラリにアクセスしてください。 蘇生されたドキュメント