生き生き生きて直感的なモバイルアプリは、ユーザーが覚えているものです。 React Native では、アニメーションは、その洗練された、専門的品質を達成するための主要なツールです。 スムーズな移行、微妙なフィードバック、そして目的の動作は、ユーザーに喜んでいるだけでなく、インターフェイスを介してそれらを導くだけでなく、役立ちます。 この記事では、コア技術を拡大し、高度なパターンを導入し、パフォーマンスのヒントを共有して、スタンドアウト React ネイティブアプリを作成するのに役立ちます。

なぜReact Nativeでアニメーションのマター

アニメーションは、目よりも多いです。 彼らは視覚的なキューを提供することによってユーザビリティを向上させます。ボタンがタップを確認するように、または新しいコンテンツを表示するようにスライドするカード。 彼らはあなたのアプリがより速く感じているように、知覚された負荷時間を短縮します。 最も重要なのは、アニメーションは、クラウド化された市場プレイスであなたのアプリを離れて設定します。 流体、思考に満ちたインターフェイスは、ユーザーの保持と満足度を高め、品質とケアを強調します。

財団: 二つのアニメーションのパワーハウス

React Native は、組み込み ] の 2 つの主要なアニメーションシステムを提供しています。アニメーション化された API と、より近代的な []] を レイマト ライブラリ にします。その違いを理解することは、適切なツールを選択するのに不可欠です。

アニメーションAPI

React Native には、JavaScript スレッドでアニメーションを実行することで、アニメーション化した API と Animated API[ 、 といった宣言的なメソッドが使われます。単純なフェードインやスライドトランジションでは、それは完全に十分です。しかし、複雑なアニメーションや連続アニメーション(例えば、ジェスチャー駆動型)が、JavaScript の動作が最もよく、JavaScript アニメーションが無効にされたときには、JavaScript アニメーションが無効にできます。

再生図書館

[]Reanimated](バージョン2または3)は、JavaScriptスレッドを完全にバイパスする、ワークレットを介してUIスレッド上でアニメーションを実行します。これにより、ハイパフォーマンス、ジェスチャー駆動、または複雑なチェーンアニメーションに最適です。 Reanimatedは、、、およびなどのホックでより柔軟なAPIを提供します。 Reanimatedは、任意の相互作用のためにシームレスに統合されます[FLT]:[FLT:]。 [FLT:。 [FLT:]は、任意のオプションは、任意のオプションは、任意のオプションは、任意のオプションを[FLT:[F]、[F]、[FLT:[F]、[F]、[F]、[FLT:[F]、[F]、[F]、[F]、[F]、[F]、[FLT:[FLT:[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[FLT:

必須アニメーションテクニック

以下は、今日実装できる実証済みの技術です。それぞれに、簡単な説明と、モーションパターンのコードフリーの説明が含まれています。

1. で/衰退して下さい

時間の経過とともに不透明度を変更するのは、要素を美しく表示または非表示にする最も簡単な方法です。 [を使用して、0から1(またはその逆)に[をアニメーション化します。 再アニメーション化のために、とアニメーションスタイルを使用します。 偽物は、モーダルオーバーレイ、ツールチップ、または画像の読み込みに優れています。

2. スライドの転移

コンポーネントを水平または垂直に翻訳して、動きを作成します。 エッジから要素をスライドすると、引き出しメニューや通知バナーのシンクが自然に感じます。 のような機能が緩和され、物理的な動きを模倣するような翻訳を組み合わせます。 より良いパフォーマンスのために、 [プロパティを使用して、を設定してください。 (アニメーションと再アニメーションの両方で動作します)。

3. スケールおよび跳ね上がり

ユーザーの相互作用(例えば、ボタンプレス)上のスケーリング要素は、触感的なフィードバックを提供します。春のアニメーションは、有機を感じる光の「バウンス」を与えます。 レイマテッドでは、 [は、バウンスを制御するために剛さ、ダンピング、および質量を調整することができます。 バウンス効果は、ボタン、カードの選択、お祝いのconfettiのようにうまく機能します。

4. 回転

アイコンやイメージを回転させ、進捗や状態の変化を示す。 読み込みスピナーは古典的な例ですが、フリップカード、矢印の拡大、または遊び心のあるローディングアニメーションにも回転が使用できます。 []を使用して、アニメーション値を回転範囲(0〜360度)にマップします。

5. 乳化の形(補間)

インターポレーションは、強力なコンセプトです。入力範囲を出力範囲にマップします。例えば、スクロール位置はパララックス効果、色変更、または要素のサイズ変更を駆動できます。アニメーションとReanimatedの両方のサポートの補間。Reanimatedのは、最大性能のためのワークレット内で動作します。

プロフェッショナルなアプリのための高度なパターン

基本技術で快適にお過ごしいただくと、豊富なやり取りを組み合わせていただけます。

チェーンとシーケンシング

(アニメーションAPI)または]とを使用して別の後にアニメーションを実行します。 このパターンは、オンボードフロー、ステップバイステップ導入、またはストガライズされたリストエントリに最適です。

パラレルアニメーション

一度に複数のプロパティを結合する--opacity、スケール、および変換-または]を単一のアニメーションスタイルで使用。 これは、フェーディング中にカードが拡大するような複雑な、調整された動きを作成します。

ゲスチャー駆動型アニメーション

[ を、スワイプ、パン、ピンチを処理するために、Reanimated で、react-native-gesture-handler[ を統合します。例えば、スワイプト-delete の 引数は、行を翻訳し、削除ボタンを明らかにします。 は、UI スレッドで完全に実行され、60 fps の 応答性を確保します。

レイアウトアニメーション

React Native の LayoutAnimation API はコンポーネントのレイアウト(追加、削除、サイズ変更)の変更を自動的にアニメーション化します。カスタマイズに限られている間、それは研磨を追加するゼロの努力方法です。 より制御するには、Reanimated の ] を ] と組み合わせて、アニメーションレイアウトの変更を手動で使用します。

共有要素の移行

画面間で共有要素を円滑に移行(例:フルスクリーンイメージに拡大するサムネイル)。 のようなライブラリ ]]] 反応ネイティブ共有エレメント または ] のようなリラクゼーション共有エレメント をラップします。 それらは、開始位置と終了位置を測定し、コピー要素をimatingに依存します。

アニメーションライブラリの活用

ゼロからすべてを書かなければならないのではなく、これらの一般的なライブラリを検討してください。

  • Lottie – JSONファイルとしてAfterEffectsからエクスポートされた、ベンダーの複雑なベクトルアニメーション。 、スピナー、イラスト、またはマイクロ・インタラクションをロードするような、複雑な、事前設計アニメーションに最適です。 [ライブラリはシームレスに統合します。
  • [Moti] - 再生の上部に構築されたMotiは、ボイラープレートの最小限の一般的なアニメーションパターン(フェード、スライド、スケールなど)の宣言的なAPIを提供します。 迅速な試作とUIマイクロアニメーションに最適です。
  • [アニメーション(React Native)[ – レイマネーションがオーバーキルする軽量効果にはまだ役立ちます。例えば、単純なパララックスヘッダーまたは回転スピナー。

パフォーマンス最適化のヒント

貧しいアニメーションは、ユーザーエクスペリエンスを台無しにします。これらのガイドラインに従って、アプリをスムーズに保つことができます。

  • [] ネイティブドライバ を使用します。 – Animated API の場合、 または ]] でアニメーションをネイティブスレッドで実行します。 アニメーションプロパティがすべてサポートされていない(opacity、transform、color do; レイアウトプロパティは使用しません)。
  • []重アニメーションでレイアニメットを - UIスレッドで完全にレイマトを再生するので、JavaScriptスレッドブロックを回避します。 常にジェスチャー駆動または連続アニメーションのためにレイマトを使用する。
  • [] レンダリングごとに再編集アニメーションを無効にします[] – または を使用してアニメーション値とスタイルを記憶します。 (更新).
  • [FPSを測定] - React NativeのFPSモニター(シェークデバイス、Perfモニターを有効にします)またはのようなライブラリを使用して、ジャンクを識別するために、React-native-performanceを。
  • []レイアウトのスラッシュ[を削減する - レイアウトの計算(例えば、[]])、[]、ハードウェアアクセラレーションなしのアニメーション特性を避けます。 ]は、寸法を変更します。

リアル・ワールドユースケース

これらの手法をアクションで見るには、Twitter(pull‐to‐refresh bounce、心アニメーション)、Airbnb(Itinerary項目間のわずかな遷移)、 〔FLT:5〕(回転と転写と転写の進行の円と、常に下限) が同じように感じます。

簡単な例で始める

アニメーションに新しい場合は、基本的なボタンプレスフィードバックで開始します。 再生:

import { useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated';
// ... inside component
const scale = useSharedValue(1);
const animatedStyle = useAnimatedStyle(() => ({
 transform: [{ scale: scale.value }]
}));
// on touch start
scale.value = withSpring(0.95);
// on touch end
scale.value = withSpring(1);
// Apply animatedStyle to a component

この最小限の例では、すぐに触覚フィードバックを与えます。ここからビルドしてください: 不透明度、翻訳、またはチェーンを追加します。

コンテンツ

React Native のアニメーション技術は、ユーザーエンゲージメントとアプリストアの評価で支払いた投資です。 シンプルなケースで Animated API を始めますが、ニーズが成長するにつれて Reanimated を卒業します。 フェード、スライド、そしてスケールなどの技術を組み合わせて、豊富な相互作用を作成します。 開発をスピードアップするために、Lotie や Moti などのライブラリを使用してください。 そして、常にパフォーマンスを優先します。 パフォーマンスを抑える - アニメーションは、プロフェッショナルなアプリのホールマークです。 実験、実際のデバイスのテスト、創造性をしてみましょう。

さらなる読み方については、公式 [] を 反応ネイティブアニメーションドキュメンテーション]] を 相対的に docs を 、 ] を React Native リソース の の Lottie を 参照してください。 これらは、理論から高度な実装までの完全な画像を提供します。