私のUICollectionView
では、カスタムオブジェクトの単純な配列を使用してセルを生成して表示します。時にはデータが変更され、変更を一度にアニメートしたいと思うことがあります。私は、2番目の配列のすべての変更を追跡し、2つを比較し、performBatchUpdates
ブロック内に一連の移動、挿入、削除、および更新操作を生成することで、これを行うことにしました。インデックスを使った操作の順序について心配する必要があるので、これらのすべてを同じブロック内で行うのはかなり難しいことです。実際には、this issueの回答は間違っていますが、コメントで修正されています。UICollectionView performBatchUpdatesブロック内の移動、挿入、削除、および更新を順序付ける方法は?
ドキュメントはかなり欠けているようだが、それは一つのケースを取り上げます。
削除は、バッチ操作で挿入前に処理されています。これは、 を意味します。削除のインデックスは、バッチ処理前のコレクションビューの状態 のインデックスに対して処理され、挿入のインデックスは のインデックスに対して処理されます。バッチ処理のすべての削除後の状態。
しかし、このドキュメントでは、移動が処理されるときについては言及していません。私がmoveItemAtIndexPath
とdeleteItemsAtIndexPaths
を同じperformBatchUpdates
と呼んだ場合、移動インデックスは削除前または削除後の順に相対的でなければなりませんか? insertItemsAtIndexPaths
はどうですか?
最後に、私は同じ操作でreloadItemsAtIndexPaths
とmoveItemAtIndexPath
を呼び出す問題に直面している:
致命的な例外を: を削除して、同じインデックスパス
をリロードするNSInternalInconsistencyExceptionの試みは、方法はあります私は同じですべての操作を行うにはperformBatchUpdates
?もしそうなら、アップデートは他のアップデートと比べてどのような順序で処理されますか?そうでない場合、人々は通常何をしていますか?他のすべての操作を実行した後でデータをリロードしますか?前?私は、すべてのアニメーションが1つのステージで行われた方が好きです。
だから、別の(たとえば異なる色)で表示されるため、更新が必要なセルがあり、移動する必要があるとします。これは私が移動してリロードする必要がある場所の例です。同じアニメーションブロックでこれらを実行する方法はありますか? –
移動しているので、セルは自動的にリロードされます。明示的にリロードする必要はありません。 – Mark
ああ!私は気づいていませんでした(そして私はこの事件を実験しなかったと思います)。コンテンツを再ロードせずにコンテンツコンテナを移動すると仮定しました。 –