Я использую SDWebImage для асинхронного скачивания и кеширования изображений в UITableView, но у меня возникают некоторые проблемы.SDWebImage Library - placeholder from URL
Сценарий следующий: Когда ячейка создана, я хочу загрузить изображение с низким качеством размытого изображения (1-2кб) с URL-адреса, прежде чем появится реальное изображение. После загрузки изображения более высокого качества я хочу показать это. До сих пор я попробовал эти варианты, но ни один, кажется, работает так, как я ожидал:
1:
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadImageWithURL:[NSURL URLWithString:lowQualityImageURL]
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (finished) {
cell.pictureView.image = image;
[manager downloadImageWithURL:[NSURL URLWithString:highQualityImageURL]
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image && finished) {
[UIView transitionWithView:cell.pictureView
duration:0.1f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
cell.pictureView.image = image;
} completion:^(BOOL finished) {
}];
}
}];
}
}];
При использовании этого кода, качество изображения низкое, кажется, можно загрузить и , но если пользователь быстро прокручивается в таблице, он будет иметь неправильные изображения для некоторых ячеек (из-за повторного использования ячеек). - Любое решение здесь?
2:
[cell.pictureView sd_setImageWithURL:[NSURL URLWithString:lowQualityImageURL] placeholderImage:[UIImage new] options:SDWebImageRefreshCached completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
[cell.pictureView sd_setImageWithURL:[NSURL URLWithString:highQualityImageURL] placeholderImage:image options:SDWebImageRefreshCached completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
}];
}];
Этот подход, кажется, исправить «неправильный образ для ячейки» вопрос, но большинство клеток в конечном итоге, показывая их соответствующие помутнение изображения istead изображения высокого качества, которые, как предполагается, чтобы показать ,
Итак, подведите итог, есть ли у вас совет о том, как я могу достичь результата, который я хочу? (скачайте изображение низкого качества -> покажите его до загрузки изображения высокого качества -> замените его высококачественным изображением)
LE: При использовании второго подхода я вижу странное поведение. Выход консоли:
набор пальца для ячейки: 1
реального набора изображений для ячейки: 1
набора большого пальца для ячейки: 2
пальца Набора для ячейки: 3
большой палец набор для ячейки: 0
реального изображения, установленное для ячейки: 0
Оказывается, что какой-то образом, некоторые из загрузки отменены.