我有一个集合视图,可以模拟封面流程。它从ALAssetLibrary异步加载图像,如此。
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath;
{
myCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"CELL_ID" forIndexPath:indexPath];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
ALAsset *asset = [assets objectAtIndex:indexPath.row];
CGImageRef thumbnailImageRef = [[asset defaultRepresentation]fullScreenImage];
UIImage *thumbnail = [UIImage imageWithCGImage:thumbnailImageRef];
dispatch_async(dispatch_get_main_queue(), ^{
cell.myImageView.image = thumbnail;
});
});
return cell;
}
如果用户快速滚动,图像需要更长时间才能加载。我想,如果用户快速滚动到图像20,他们必须等待图像1-19加载,即使它们不再在屏幕上。所以,我的问题是,如果在加载过程完成之前单元格离开屏幕,是否有办法停止图像加载?
答案 0 :(得分:1)
排队后,无法取消调度块。我使用NSOperationQueue
实现了类似的功能。将调度调用替换为NSOperation
子类,这些子类具有标识它们所属的索引路径的属性,并将它们放入操作队列中。然后,在滚动委托回调期间,迭代队列,取消太远的操作。