2013-05-10 71 views
1

我有一个问题,我不确定它是否可行,所以我想我会在这里寻求建议!UICollectionView在快速加载中存储数组中的单元格

我有一个应用程序,它使用UICollectionView向用户呈现按钮的网格。我使用引导样式的渐变按钮,因此绘制每个单元格(在一个'网格中可以有40个按钮),它使用一些系统资源,重绘可能需要一些时间(长达半秒!)。用户也可以在集合视图中加载不同的集合。为了规避这种加载时间,是否可以将所有单元格保存在一个数组中,而不是在调用-cellForRowAtIndexPath时配置每个单元格,只需从数组中拉出单元格?

我不太确定这是否做到了。我的应用程序有一个加载屏幕,因此可以在启动时填充该数组。

感谢, 保罗

回答

4

您可以使用NSCache举行绘制细胞,

1)@属性(非原子,强)NSCache * myCache;

2)在viewDidLoad中

self.myCache = [[NSCache的alloc] INIT];

3)使用这2种方法,

-(id) cellForIndexPathRow:(NSNumber *) number{ 
    return [self.myCache objectForKey:number]; 
} 

-(void) setCell:(id) cell forIndexPathRow:(NSNumber *) number{ 
    [self.myCache setObject:cell forKey:number]; 
} 

4)当您绘制单元格,

第一个电话

id cell = [self cellForIndexPathRow:[NSNumber numberWithInt:indexPath.row]]; 
if(!cell){ 
//then create draw the cell 

//store the drawn cell in cache  
[self setCell:cell forIndexPathRow:[NSNumber numberWithInt:indexPath.row]]; 
} 
+2

谢谢 - 帮助了很多! – larrysanchez 2013-05-10 12:03:06

+0

我还有一个问题 - 有没有办法让这个多维?我正在考虑根据需要创建尽可能多的缓存,然后将它们添加到数组中?不幸的是会有一个动态的数量,否则我可以在.h文件中声明它们。 – larrysanchez 2013-05-10 12:28:24

+0

您可以为它们保留一个缓存对象,您可以拥有不同的密钥。 – 2013-05-10 12:35:23

相关问题