UICollectionView首先滚动速度慢,处理图像

时间:2016-11-01 00:16:06

标签: ios image uicollectionview uicollectionviewcell

这似乎是非常糟糕的编程习惯,但我不知道如何实现任何其他例程。

我有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; 
}

最初,当我滚动视图时,所有图像都会正确加载和显示。但是,滚动非常不稳定。

当我到达屏幕的底部,然后在整个视图中自由地上下滚动时,一切都很好,按照应有的方式工作。

我怎样才能做到这一点,从一开始就不存在波动?

1 个答案:

答案 0 :(得分:0)

没关系,我决定在viewDidLoad阶段提前延迟加载图片。将这些图像存储在数组中,然后在需要时使用它们的索引。更好的滚动响应,平滑而清晰。