如何结合drawRect:和ImageCache来加速表视图滚动

时间:2013-08-08 05:42:53

标签: ios uitableview

我需要在我的自定义表格单元格中实现自定义drawRect:方法以加快tableview滚动,但是,应用程序应该从网上下载一个图像,所以我想在我的应用程序中添加图像缓存。我的应用程序的原始实现是使用SDWebImage库,它实现了一个提供下载图像方法的imageView。如果我想在drawRect:中添加图片,如何实现从网上下载图片并缓存它们?

1 个答案:

答案 0 :(得分:0)

您需要使用SDWebImage下载和缓存图像。然后在该下载操作的委托/完成块中,您需要将图像分配给您的属性并调用setNeedsDisplay。 setNeedsDisplay将导致重绘您的视图。这应该在mainQueue上调用。

 [[SDWebImageManager sharedManager] downloadWithURL:[NSURL URLWithString:theArticle.imageURL] options:SDWebImageLowPriority progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) {
       dispatch_async(bakground_queue, ^{
       //Here you probably want to dispatch_async to a background queue to do all the image resizing first before drawing on main queue

           dispatch_async(dispatch_get_main_queue(), ^{
               weakSelf.thumbnailImage = image;
               [weakSelf setNeedsDisplay];
           });
       });
   }];

在drawRect中,您需要从该属性中进行绘制。例如

[self.image drawInRect:rect]

这只是如何实现这一目标的基本原则。可能需要更多工作来真正优化它(例如,在不需要时取消下载操作)

编辑: SDWebImageManager有一个委托方法,用于在将图像存储到磁盘缓存之前调整大小/转换图像。您可能希望使用该方法而不是像上面那样将dispatch_async用于后台队列。