在我的项目中,我使用UICollectionView来显示图标网格 .
用户可以通过单击分段控件来更改排序,该分段控件使用不同的NSSortDescriptor调用从核心数据中获取 .
The amount of data is always the same, just ending up in different sections / rows:
- (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所以任何帮助将是伟大的...
比尔,谢谢 .
8 回答
reloadData不会设置动画,也不会在放入UIView动画块时可靠地执行此操作 . 它想要在UICollecitonView performBatchUpdates块中,所以尝试更像:
在
-performBatchUpdates:
中包装-reloadData
似乎不会导致单节集合视图进行动画处理 .但是,此代码有效:
这就是我为动画重新加载ALL SECTIONS所做的工作:
Swift 3
对于Swift用户,如果您的collectionview只有一个部分:
正如https://stackoverflow.com/a/42001389/4455570所见
如果您想要更多控件和可自定义功能检查this,它包含对UICollectionViewCell动画的各种方式的非常详细的解释 .
重新加载
performBatchUpdates:completion:
块内的整个集合视图在iOS 9模拟器上为我做了一个小故障动画 . 如果您想要删除特定的UICollectionViewCell
,或者如果您有索引路径,则可以在该块中调用deleteItemsAtIndexPaths:
. 通过使用deleteItemsAtIndexPaths:
,它可以做出流畅而漂亮的动画 .帮助文字说:
我认为关键部分是“使集合视图丢弃任何当前可见的项目” . 如何动画它丢弃的物品的动作?
对于快速用户来说,这很方便 -