gpt4 book ai didi

ios - 在滚动期间重用 UICollectionViewCells

转载 作者:行者123 更新时间:2023-12-01 17:54:01 26 4
gpt4 key购买 nike

我有一个问题,

我有一个简单的 UICollectionView,其中包含从 Flickr 加载图像的静态 200 个单元格。

我的 CellForItemAtIndexPath 看起来像这样:

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"FlickrCell" forIndexPath:indexPath];
cell.backgroundColor = [self generateRandomUIColor];

if(![[cell.subviews objectAtIndex:0] isKindOfClass:[PFImageView class]])
{
NSURL *staticPhotoURL = [self.context photoSourceURLFromDictionary:[self.photos objectAtIndex:indexPath.row] size:OFFlickrSmallSize];
PFImageView *imageView = [[PFImageView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.height, cell.frame.size.width) andImageURL:staticPhotoURL andOwningCell:cell];
[cell addSubview:imageView];
}
return cell;
}

PFImageView 是 UIImageView 的子类在后台线程上加载 Flickr 照片 URL,然后在主线程上更新它自己的图像 - 这工作正常。

逻辑非常简单——如果没有可出列的单元格,我将创建一个单元格。

如果单元格(我希望它被出列并且已经有一个 PFImageView) 有一个 PFImageView,我为单元格分配并初始化一个 imageView,并将其添加为单元格的 subview 。

因此我期望 如果单元格已经出队,它应该已经有一个 PFImageView 作为 subview ,因为我们不应该进入 if 语句来创建一个新的 imageView 并启动一个新的照片下载请求

相反,我看到的是 UICollectionView 顶部和底部的单元格暂时“离开屏幕” - 当它们回到屏幕上时,它们没有被重用,并且似乎创建了一个新单元格并刷新了图片。

1)一旦创建了单元格,我如何才能获得静态图像(即当单元格稍微离开屏幕时不刷新。

2) 为什么细胞没有被重复使用?

非常感谢您的时间。

约翰

最佳答案

UICollectionView将重复使用电池以实现最大效率。它不保证任何特定的重用或填充策略。有趣的是,它似乎基于两个区域的整数幂来放置和删除单元格——例如在非视网膜 iPad 上,它可能会将您的滚动区域划分为 1024x1024 的区域,然后在这些区域进出可见区域时填充和取消填充每个区域。但是,您不应该对它的确切行为做出任何期望。

此外,您对 Collection View 单元格的使用不正确。见 the documentation .一个单元格显式地具有至少两个 subview — backgroundViewcontentView .因此,如果您添加一个 subview ,它将至少位于索引 2 处,实际上,该索引将是未定义的。在任何情况下,您都应该将 subview 添加到 contentView ,而不是细胞本身。

做你正在做的事情最正常的方法是创建一个自定义 UICollectionView本质上具有 PFImageView 的子类在其中。

关于ios - 在滚动期间重用 UICollectionViewCells,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21614731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com