我有一个UICollectionView
和一个定制的UICollectionViewCell
来显示我的内容,这些内容应该每秒刷新一次。
我将调用reloadData
方法来重新加载整个集合视图以满足我的需要。
但是,但是,每次我重新加载数据时,我的集合视图单元格都会 Flink 。
它看起来像下面的图像。我的应用程序的两秒钟。第一秒是好的。但第二秒,集合视图显示重用的单元格第一(黄色区域),然后显示正确的单元格(配置单元格)最后。这看起来像一个 Flink 。
这似乎是一个单元格重用问题。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;
}
3条答案
按热度按时间c7rzv4ha1#
我找到了答案,虽然离问题已经很久了。
不要使用
reloadData()
或reloadItems()
。使用
collectionView.reloadSections(IndexSet(integer: yourSectionIndex))
。动画将平滑地发生。3j86kqsm2#
对我有帮助。
tnkciper3#
您可以执行以下操作: