我有一个UICollectionView
和一个自定义UICollectionViewCell
来显示我的内容,应该每秒刷新一次。
我将调用reloadData
方法重新加载整个集合视图以满足我的需求。
但是,每次重新加载数据时,我的集合视图单元格都会闪烁。
如下图所示。两秒钟我的应用程序。第一秒就可以了。但第二秒,集合视图首先显示重复使用的单元格(黄色区域),然后最终显示正确的单元格(已配置的单元格)。这看起来像眨眼。
这似乎是一个细胞重用问题。 CollectionView
显示单元格而未完全配置它。我怎么能解决它?
我的cellForItemAtIndexPath:
方法:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
YKDownloadAnimeCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:[YKDownloadAnimeCollectionCell description] forIndexPath:indexPath];
YKAnimeDownloadTask *animeDownloadTask = [[YKVideoDownloadTaskManager shared] animeDownloadTasks][indexPath.row];
[cell setUpWithDownloadAnime:animeDownloadTask editing:self.vc.isEditing];
cell.delegate = self;
if (self.vc.isEditing) {
CABasicAnimation *imageViewAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
imageViewAnimation.fromValue = @(-M_PI/64);
imageViewAnimation.toValue = @(M_PI/128);
imageViewAnimation.duration = 0.1;
imageViewAnimation.repeatCount = NSUIntegerMax;
imageViewAnimation.autoreverses = YES;
[cell.coverImageView.layer addAnimation:imageViewAnimation forKey:@"SpringboardShake"];
CABasicAnimation *deleteBtnAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
deleteBtnAnimation.fromValue = @(-M_PI/32);
deleteBtnAnimation.toValue = @(M_PI/32);
deleteBtnAnimation.duration = 0.1;
deleteBtnAnimation.repeatCount = NSUIntegerMax;
deleteBtnAnimation.autoreverses = YES;
[cell.deleteBtn.layer addAnimation:deleteBtnAnimation forKey:@"SpringboardShake1"];
} else {
[cell.coverImageView.layer removeAllAnimations];
[cell.deleteBtn.layer removeAllAnimations];
}
return cell;
}
答案 0 :(得分:0)
self.collectionView.reloadItems(at: self.collectionView.indexPathsForVisibleItems)
对我有帮助。
答案 1 :(得分:0)
好了,我已经找到答案了,尽管距离问题已经很久了。
请勿使用reloadData()
或reloadItems()
。
使用collectionView.reloadSections(IndexSet(integer: yourSectionIndex))
。动画将顺利进行。