2016-10-11 6 views
1

iOSアプリケーションにReduxをReSwiftで適用しようとしていますが、未回答のReduxの質問がまだあります。ReSwift - アニメーションの途中でアクションを受け取ります

1)アニメーションの途中で状態更新を受け取る方法を処理するにはどうすればよいですか? 例:何らかの状態変化が起こってアニメーションがトリガーされたとしたら、(インターネットからのデータ同期によって)別のアップデートを受け取りました。どのようにそのシナリオを処理するには?アニメーションが終了するまでその第2の更新を遅延させる。

2)状態を変更するアクションのみを送信するか、アニメーションをトリガするためにアクションを送信するのは問題ありませんか?例:一部のアニメーションをトリガーするアクション(UIScrollViewの一部の位置へのスクロール)が必ずしも状態を変更するとは限りません(確かに、私はスクロール位置の状態も持っていますが、その状態を変更しても、新しいスクロール位置、それは直接それに移動することを意味する可能性があります)。また、別のアクションがディスパッチされ、他の状態が変更された後、アクションクリエイターで条件付きでアニメーションをトリガーしています。そのため、Viewコンポーネントでこれを行うことはできません。

答えて

1

ReSwiftを使用した状態とアクションの処理は、驚くほどReduxと似ていますが、タイピングは強力です。

周囲の状態を処理する2つの主要な種類のアニメーションがあります。あなたの2つの質問でうまくまとめられました。

  1. 状態にをアニメーション。州の変更 - あなたの例のように - から有効状態のビューを新しい状態にします。進行中の既存のアニメーションがある場合は、アニメーションをキャンセルして(可能であれば実行中のアニメーションで)、または次のアニメーションをキューに入れることができます。

    ほとんどの場合、アニメーションをキャンセルできる場合はキャンセルしてください。それがリストビューの場合は、あまり選択肢がありません。アニメーションをキューに入れたい場合は、アニメーションの実行中にビューの変更を無視し、最新の状態のローカルコピーを更新します。アニメーションの前後で状態を比較するためにアニメーションが完了ブロックをトリガーすることを確認し、状態が異なる場合は別のアニメーションを開始します。

  2. 2番目の部分は、それらをトリガーされたアニメーションとして扱うように聞こえます。つまり、ログインに失敗し、パスワードフィールドが1秒間動揺します。これらの

    一部はすなわち、state.login_status.pendingから.failedに行くことを開始するためにアニメーションをトリガし、現在に前のフィールドの値を比較することにより、処理することができます。

    生のアクションストリームは表示されません。ちょうどstateです。 Reduxと同じです。私はに、状態に影響を与えない可能性のあるイベントについてもアクションを使用するよう勧めます。しかし、あなたがこれらのアクションを見る唯一の方法は、ミドルウェアによるものです。アクションストリームをフィルタリングし、それらをViewModelまたはViewControllerに公開するパッシブミドルウェアオブジェクトを作成します。

私はそれがあまりにも単純すぎると聞きますが、あまりそれほどありません。アクションストリームを真実の単一のソース、ストリームの投影としての状態、状態の投影としてのビューとして扱うだけです。それは始めるには限界があると感じますが、間違ってしまうのは難しくなります。

注:現時点では

  • すべてのレデューサーは、メインスレッド上で実行されることを暗示しているが、それが適用されていない、とあなたまでディスパッチが正しいスレッドから行われていることを確認します。
+0

どのようにアニメーションをキューに入れますか? ActionA、ActionB、ActionC、ActionC、ActionCの3つのアクションがActionAからアニメーションの途中で送られてきたとしましょう。私はアニメーションを取り消したくないし、 'アニメーションA'の終わりから'アニメーションC'の始めに行きたいとは思っていませんが、私はまだ 'アニメーションB'もトリガーしたいと思っています。アニメーション化中に状態の変化を無視することはできません。そうでないとアニメーションBは起こりません。 –

+0

そして、ビューの変更を無視すると、すべての 'update'呼び出しでチェックされる' ignoreUpdates:Bool'変数があり、 'true'の場合は' return'ですか? –

+0

私のViewControllerにアニメーションアクションを受け取るための「減速機」がありますか? –

関連する問題