React Native Animatedまとめ
3734 ワード
React Nativeで実装されたアニメーションの主なフレームワークは
Animatedの資料については、ドキュメントのネット上にたくさんありますが、ここでは詳しく説明しません.自分が開発した期間をまとめて、アニメイトについての小さな理解をしてみましょう.
アップルは自分のプラットフォームAppのユーザー体験を非常に重視しており、現在RNプラットフォームのアニメーションライブラリはiOS SDKが提供できる効果には全く及ばず、精華の簡略化バージョンにすぎないと言える.また、アップルの毎年のWWDCは、自社のアニメーションライブラリの更新を重視している.
いくつかのAnimatedコンポーネントでは、
アニメイト:現在はサポートのみ アニメーションコンポーネントの具体的な状態ではなく、アニメーションの駆動として使用する必要がある 動画全体のコードが切り裂かれ、遡及して読み直す手間がかかる.
いくつかのシーンでは、LayoutAnimatedはAnimatedよりも直接的で簡単です.
LayoutAnimatedのシンプルな実装:
バインドと駆動の2つの語にまとめられます.
バインディングは、コンポーネントのプロパティとAnimated.Valueバインド、value値変化駆動コンポーネント再描画アニメーション.これは、オリジナルアニメーションでコンポーネント自体のプロパティを使用してアニメーションを駆動するのとは異なります.
駆動は、Animatedを制御することです.Valueの値は一定期間の関数変化であり,既成の曲線(etc:Easing)を用いてもよいし,他のvalue値にバインドしてマッピング(Animated.Event)を形成してもよい,Animatedの多くの機能は本質的にAnimated.Valueの異なる駆動方式.
コードも少し貼って、簡単なAnimatedを実現します:
マッピング、バインド、結合、キー、アニメーションカーブなど、他のアニメーションの高度な実装は、ドキュメントを参照できます.
最初は
ドキュメント自体はあまり説明されていません.ここでonScrollはScrollViewを構成するコールバック関数であるため、Animated.event()は、scrollによって呼び出され、現在のスクロールイベントeに転送されるメソッドを返します.
Animated.event()の最初のパラメータはバインドシーケンスです.Animatedをどのようにするかを規定します.Value()は指定されたソースにバインドされ、特殊な文法と見なすことができ、偽のコードで書かれています.
2番目のパラメータはconfigです.ここではイベントのリスニング関数を指定します.実はonScrollの通常のリスニング関数です.他のオプションの構成はドキュメントを参照してください.
だから、この拗ねた文法を訳すことができます.
Animated
で、多くのバージョンの反復を経て、Animatedはかなり完備しており、日常的な開発ニーズを基本的に満たすことができます.Animatedの資料については、ドキュメントのネット上にたくさんありますが、ここでは詳しく説明しません.自分が開発した期間をまとめて、アニメイトについての小さな理解をしてみましょう.
アニメイトVSオリジナルアニメーション
アップルは自分のプラットフォームAppのユーザー体験を非常に重視しており、現在RNプラットフォームのアニメーションライブラリはiOS SDKが提供できる効果には全く及ばず、精華の簡略化バージョンにすぎないと言える.また、アップルの毎年のWWDCは、自社のアニメーションライブラリの更新を重視している.
いくつかのAnimatedコンポーネントでは、
useNative
スイッチをオンにすることで、iOSプラットフォームの最下位のアニメーションライブラリで効果を実現し、よりスムーズな効果を得ることができます.アニメイト:
Animated.Text
、Animated.Image
、Animated.View
などいくつかの指定されたコンポーネントがあり、カスタマイズされたアニメーションコンポーネントが実現するのは面倒です.Animated Value
直感的ではない.Animated VS LayoutAnimated
LayoutAnimated
コンポーネントFrameベースの簡略化されたデータベースであり、CocoaのUIView animate blockと非常に類似している.AnimatedはValueに基づいて駆動され、複雑です.いくつかのシーンでは、LayoutAnimatedはAnimatedよりも直接的で簡単です.
LayoutAnimatedのシンプルな実装:
startAnimation() {
LayoutAnimation.configureNext({
duration: 700, //
create: { //
type: LayoutAnimation.Types.spring,
property: LayoutAnimation.Properties.scaleXY,// opacity、scaleXY
},
update: { //
type: LayoutAnimation.Types.spring,
},
});
this.setState({width: this.state.width + 10, height: this.state.height + 10});
}
Animatedコアロジック
バインドと駆動の2つの語にまとめられます.
バインディングは、コンポーネントのプロパティとAnimated.Valueバインド、value値変化駆動コンポーネント再描画アニメーション.これは、オリジナルアニメーションでコンポーネント自体のプロパティを使用してアニメーションを駆動するのとは異なります.
駆動は、Animatedを制御することです.Valueの値は一定期間の関数変化であり,既成の曲線(etc:Easing)を用いてもよいし,他のvalue値にバインドしてマッピング(Animated.Event)を形成してもよい,Animatedの多くの機能は本質的にAnimated.Valueの異なる駆動方式.
コードも少し貼って、簡単なAnimatedを実現します:
constructor(props) {
super(props);
this.state = {
// Animated.Value
bgOpacity: new Animated.Value(0),
};
this.bgOpacityToValue = 1;
}
componentDidMount() {
let animates = [
// Animated Value ,
Animated.spring(this.state.bgOpacity, {
toValue: this.bgOpacityToValue,
})
];
this.state.bgOpacity.setValue(0);
Animated.parallel(animates).start();
}
render() {
return (
// Animated.View, Animated.Value
);
}
マッピング、バインド、結合、キー、アニメーションカーブなど、他のアニメーションの高度な実装は、ドキュメントを参照できます.
Animated Event
最初は
Animated.Event
バインドに疑問を抱いていたが、アニメイトでは理解しにくい点の一つでもあり、公式のサンプルコードは以下の通りである. onScroll={Animated.event(
[{nativeEvent: {contentOffset: {x: this._scrollX}}}],
{listener: (event) => console.log(event)}, // Optional async listener
)}
ドキュメント自体はあまり説明されていません.ここでonScrollはScrollViewを構成するコールバック関数であるため、Animated.event()は、scrollによって呼び出され、現在のスクロールイベントeに転送されるメソッドを返します.
Animated.event()の最初のパラメータはバインドシーケンスです.Animatedをどのようにするかを規定します.Value()は指定されたソースにバインドされ、特殊な文法と見なすことができ、偽のコードで書かれています.
e.nativeEvent.contentOffset.x this._scrollX
2番目のパラメータはconfigです.ここではイベントのリスニング関数を指定します.実はonScrollの通常のリスニング関数です.他のオプションの構成はドキュメントを参照してください.
だから、この拗ねた文法を訳すことができます.
onScroll={(e) => {
Animated.event(
[{nativeEvent: {contentOffset: {x: this._scrollX}}}],
{listener: (event) => console.log(event)}, // Optional async listener
)(e);
}}