1.对于(
[cell.imageView sd_setImageWithURL:url placeholderImage:placeholder completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
NSLog(@"----图片加载完毕---%@", image);
}];
) 中的的completed回调到底是在imageview设置完下载的图片后执行,还是在imageview设置完下载的图片前执行呢?
让我们看下源码:
if (url) {
__weak UIImageView *wself = self;
id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (!wself) return;
dispatch_main_sync_safe(^{
if (!wself) return;
if (image) {
wself.image = image;
[wself setNeedsLayout];
} else {
if ((options & SDWebImageDelayPlaceholder)) {
wself.image = placeholder;
[wself setNeedsLayout];
}
}
if (completedBlock && finished) {
completedBlock(image, error, cacheType, url);
}
});
}];
源码清楚显示,在“
wself.image = image;
”才去执行block,所以对于一些在多复用的cell里边设置图片并将下载完毕的图片做灰度或其他操作的时候,直接在complete回调里执行imageView的图片替换操作即可.
更多问题,加群讨论:565191947