Загрузка картинок в огромном UICollectionView - PullRequest
0 голосов
/ 06 мая 2018

Я загружаю изображения для своих ячеек вида коллекции следующим образом:

func loadThumbnail(..){

              ...
            //Making the request
            self.ProfilePicture.sd_setImage(with: requestUrl, placeholderImage: #imageLiteral(resourceName: "SharePreviewIcon"), completed: { [weak self] (newImage, error, cacheType, url) in

                if self == nil {
                    return
                }

                if !isActive(){ //If the cell is not active, ignore and return
                    return
                }

                return
            })

}

и я вызываю loadThumbnail каждый раз, когда ячейка активна. Теперь, если у меня 30 ячеек и 15 активных, то все 15 изображений будут загружены, и многие запросы отменяются или просто закрываются системой, потому что их слишком много одновременно.

Я все еще любитель, и я просто не знаю, что делать. Большое спасибо.

ВАЖНОЕ РЕДАКТИРОВАНИЕ *

Все живет в контроллере вкладок, и каждая вкладка имеет свой собственный вид коллекции. Если я отменю загрузку в методе prepareForUse (), то будут отменены только те клетки, которые были переработаны.

Если я переключу вкладки, ячейки, которые все еще активны, не будут отменены, и я не могу загрузить ячейки из нового представления коллекции.

1 Ответ

0 голосов
/ 06 мая 2018

Вы должны понимать, что внутри CellForItem вы повторно используете ячейку, поэтому запрос, который вы начали для ячейки, может быть вызван в другой раз в той же ячейке при прокрутке.

Подумайте об этом - На CellForItem вызовите loadTumbnail, это загрузит изображение как вы.

Внутри переопределения ячейки - prepareForReuse и там вы должны отменить запрос

func prepareForReuse() {
    super.prepareForReuse()
    imageView.cancelCurrentImageLoad; // UIImageView for whatever image you need to cancel the loading for
}

Это отменит запрос перед запуском другого.

Другая вещь - self.ProfilePicture, рассмотрите возможность изменения имени imageView на строчные буквы.

https://developer.apple.com/documentation/uikit/uicollectionreusableview/1620141-prepareforreuse

...