这似乎是非常糟糕的编程习惯,但我不知道如何实现任何其他例程。
我有UICollectionView
管理3 x 20个单元格,其中每个单元格显示不同的图像。最初,我的自定义UICollectionViewCell
子类(StoneCell
)默认为图像StoneLocked.png
。所以所有60个细胞都从该图像开始。然而,最终,所有的细胞都将显示出一块石头"与不同的形象。我想通过将每个不同的图像加载到60个单元格中的一个来测试其外观。这是我写的。
static NSString *cellIdentifier = @"stoneCell";
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath {
//UICollectionViewCell* regular;
NSMutableArray *sA = [self.stoneArray objectAtIndex:indexPath.section];
NSNumber *stoneNum = [sA objectAtIndex:indexPath.row];
StoneCell *cell = (StoneCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
if ([stoneNum integerValue] == 0) {
[cell.stone setBackgroundImage:[UIImage imageNamed:@"Banana.png"]
forState:UIControlStateNormal];
[cell.stone setTitle:[NSString stringWithFormat:@""] forState:UIControlStateNormal];
} else if ([stoneNum integerValue] == 1) {
[cell.stone setBackgroundImage:[UIImage imageNamed:@"Flamingo.png"]
forState:UIControlStateNormal];
[cell.stone setTitle:[NSString stringWithFormat:@""] forState:UIControlStateNormal];
} else if {
// IMAGE NOW 58 MORE if-else STATEMENTS LIKE THE ABOVE 2.
}
cell.stone.layer.cornerRadius = 6;
cell.stone.layer.masksToBounds = YES;
[cell addSubview:cell.stone];
cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;
return cell;
}
最初,当我滚动视图时,所有图像都会正确加载和显示。但是,滚动非常不稳定。
当我到达屏幕的底部,然后在整个视图中自由地上下滚动时,一切都很好,按照应有的方式工作。
我怎样才能做到这一点,从一开始就不存在波动?
答案 0 :(得分:0)
没关系,我决定在viewDidLoad
阶段提前延迟加载图片。将这些图像存储在数组中,然后在需要时使用它们的索引。更好的滚动响应,平滑而清晰。