1. ホーム
  2. ios

[解決済み] UICollectionView アニメーションによるデータ変更

2023-05-12 19:38:48

質問

私のプロジェクトでは、アイコンのグリッドを表示するためにUICollectionViewを使用しています。

ユーザーは、異なるNSSortDescriptorを持つコアデータからのフェッチを呼び出すセグメント化されたコントロールをクリックすることで、順序を変更することができます。

データ量は常に同じで、異なるセクション/行で終わるだけです。

- (IBAction)sortSegmentedControlChanged:(id)sender {

   _fetchedResultsController = nil;
   _fetchedResultsController = [self newFetchResultsControllerForSort];

   NSError *error;
   if (![self.fetchedResultsController performFetch:&error]) {
       NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
   }

   [self.collectionView reloadData];
}

問題は、reloadDataが変化をアニメーション化せず、UICollectionViewが新しいデータでポップアップするだけであることです。

変更前と変更後のセルがどのindexPathにあったか記録しておき、[self.collectionView moveItemAtIndexPath: toIndexPath:] で変更のためのアニメーションを実行すべきでしょうか、それとももっと良い方法があるのでしょうか?

私はcollectionViewsのサブクラスをあまり理解していなかったので、どんなヘルプでも素晴らしいでしょう...。

ありがとうございます。 Billです。

どのように解決するのですか?

reloadDataはアニメーションしませんし、UIViewのアニメーションブロックに置かれた場合は確実にそうします。 それはUICollecitonView performBatchUpdatesブロックにあることを望むので、より似たようなことを試してみてください。

[self.collectionView performBatchUpdates:^{
    [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
} completion:^(BOOL finished) {
    // do something on completion 
}];