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