我有一个集合视图,它模拟了覆盖流。它从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加载,即使它们不再在屏幕上。所以,我的问题是,如果单元格在加载过程完成之前离开屏幕,是否有一种方法可以停止图像加载?
调度块一旦进入队列就不可能被取消。我已经使用NSOperationQueue
实现了类似的东西。用NSOperation
子类替换调度调用,这些子类具有标识它们所属索引路径的属性,并将它们放入操作队列中。然后,在滚动委托回调期间,遍历队列,取消太远的操作。