定期更改 UICollectionView 单元格图像

Posted

技术标签:

【中文标题】定期更改 UICollectionView 单元格图像【英文标题】:Changing UICollectionView cell image at regular interval 【发布时间】:2017-02-15 09:22:15 【问题描述】:

我正在使用 UICollectionView 开发 ios 10.x 应用程序,并希望定期更改特定单元格的图像。

下面的代码显示了当前的实现。即使它应该每半秒更改一次单元格背景图像,它也会立即更改图像,而忽略 NSThread SleepAt 0.5 秒的间隔。

我怀疑有关主线程处理或 ReloadItem 方法的一些问题,但尚未得出明确的结论。非常欢迎任何见解!谢谢。

NSNumber* originalCardSelected;
int position;

for (int i = 0; i < [opponentOriginalCardArray count]; i++) 

  originalCardSelected = [opponentOriginalCardArray objectAtIndex:i];
  position = [self convertLevelDataPositionToCellViewPosition:[originalCardSelected intValue]];

  NSMutableArray *tmpBackgroundAssets = [self getNewAssetBackgroundBasedOnBackgroundType:playbackBackground Index:position];
    self.backgroundAssets = tmpBackgroundAssets;

    dispatch_async(dispatch_get_main_queue(), ^



        [collectionViewRoot reloadItemsAtIndexPaths:[collectionViewRoot indexPathsForVisibleItems]];
    );
    [NSThread sleepForTimeInterval:0.5];



【问题讨论】:

我认为UIImageView animationImages 属性可能更适合您正在尝试做的事情。 dispatch_async 异步执行代码,这就是为什么在 [NSThread sleepForTimeInterval:0.5] 行之前发生重新加载的原因。 更好地使用NSTimer 【参考方案1】:

您应该使用 performBatchUpdates(_:completion:) 方法并在其中添加您的 for 循环。

记住不要在块内保留强引用以避免保留循环。

编辑:

在完成块中,您可以检查是否完成并添加您的 NSThread 方法

【讨论】:

以上是关于定期更改 UICollectionView 单元格图像的主要内容,如果未能解决你的问题,请参考以下文章

根据单元格的不更改单元格高度动态更改 UICollectionView 高度

设备方向更改时如何更改 UiCollectionView 单元格大小?

动画 UICollectionView 单元格大小更改和重新定位周围的单元格

当边界 UICollectionView 更改时调整单元格大小

单击 UIButton 时切换/更改 UICollectionView 中的单元格

更改 UICollectionView 单元格 X 位置 - 快速