이것은 매우 불쌍한 프로그래밍 방법처럼 보일 것입니다. 그러나 다른 루틴을 구현하는 방법을 모르겠습니다.UICollectionView가 느리게 처음 스크롤하면서 이미지를 처리합니다.
저는 각 셀이 다른 이미지를 표시하는 3 x 20 셀을 관리하는 UICollectionView
을 보유하고 있습니다. 원래 내 맞춤 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;
}
처음에는보기를 스크롤 할 때 모든 이미지가로드되어 올바르게 표시됩니다. 그러나 스크롤이 고르지 않습니다.
화면의 맨 아래에 도달 한 다음보기에서 자유롭게 위아래로 스크롤하면 모든 것이 잘되고 제대로 작동합니다.
어떻게하면 갈라진 틈이 없는가, choppiness가 존재하지 않도록 할 수 있습니까?
이미지로드를 백그라운드 대기열로 이동해야합니다. 그렇지 않으면 앱이 여전히 사용자에게 뒤떨어져 보일 수 있습니다. – kabiroberai