终止在UICollectionView中的Async CGImageRef加载



我有一个集合视图,它模拟了覆盖流。它从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子类替换调度调用,这些子类具有标识它们所属索引路径的属性,并将它们放入操作队列中。然后,在滚动委托回调期间,遍历队列,取消太远的操作。

相关内容

  • 没有找到相关文章

最新更新