В моем методе cellForItemAtIndexPath у меня есть этот код:Ленивые образы загрузки в UICollectionView с SDWebImageManager
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadWithURL:[NSURL URLWithString:coverURL] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) {
RRRBigItemCell *cell = (RRRBigItemCell *)[collectionView cellForItemAtIndexPath:indexPath];
if (cell) {
RRRImageView *coverView = (RRRImageView *)[cell viewWithTag:COVER_TAG];
coverView.image = image;
}
}];
Когда я запустить приложение и я прокрутки вниз, то все в порядке. Но когда я прокручиваю вверх, чем ячейки, которые уже были показаны, не загружены изображения (cell == nil). И если я снова прокручу вниз, проблема останется для уже отображаемых ячеек, но только новые загрузили изображения. Любая идея, что я делаю неправильно?
Ну, я использовал решение pawan еще до того, как он написал свой ответ. Проблема заключалась в том, что RRRImageView это не просто подкласс UIImageView, поэтому было немного сложнее использовать эту категорию, но каким-то образом мне удалось это сделать. Я также попробовал ваше решение, но indexPathsForVisibleItems не содержал indexPath. Может, это потому, что я не использовал для этого основной поток? Есть идеи? Код был точно таким же, но без отправки ... – krzysiek
Apple действительно рекомендует обновлять пользовательский интерфейс в основном потоке, я, конечно же, прочитал примеры, когда существует огромная задержка в коллекциях и табличных просмотров при обновлении пользовательского интерфейса, когда на фоновом потоке , indexPathsForVisibleItems будет возвращать массив и будет содержать коллекцию indexPath для видимых элементов. – MDB983