Отменить загрузку изображения с помощью AlamofireImage

мы изо всех сил пытаемся отменить запрос, который уже отправлен, когда мы используем ячейку представления коллекции.. (я не говорю о случаях, когда мы хотим отменить запрос, потому что мы уже отправили тот же запрос) ... я думаю, нам нужно использовать методы: cancelRequestForRequestReceipt.. проблема в том, что непонятно как получить этот RequestReceipt.

Пример:

У нас есть представление коллекции с разными изображениями (у каждого изображения свой URL-адрес). проблема в том, что когда мы пытаемся прокрутить только в 1 направлении, и у нас есть 1000 изображений ... в основном мы хотим иметь возможность отменить только что отправленный запрос, прежде чем изображение вернется, то есть у нас нет изображения, и мы не 't AlamofireImage, чтобы продолжить этот запрос ... после того, как ячейка исчезнет (из-за медленного интернета и прокрутки фестиваля).. Итак, если я правильно понял, мы можем использовать cancelRequestForRequestReceipt ... проблема в том, что мы не можем найти, как получить этот RequestReceipt...

Кстати: я видел пример кода демо-приложения AlamofireImage,

override func prepareForReuse() {
    super.prepareForReuse()

    imageView.af_cancelImageRequest()
    imageView.layer.removeAllAnimations()
    imageView.image = nil
}

Как я уже сказал, этот код отменит запрос на изображения, ТОЛЬКО если запрос уже находится в очереди операций.

Помощь :)


person Sosily    schedule 11.09.2016    source источник


Ответы (1)


Я думаю, вы неправильно поняли, что в этом примере делает AlamofireImage, но сначала давайте разберемся, что делает prepareForReuse.

Каждый раз, когда ячейка будет удалена из очереди, этот метод вызывается, это означает, что если, например, как вы сказали, вы быстро прокручиваете вперед и назад, этот метод будет вызываться, если вы быстро прокручиваете в одном направлении с помощью n images этот метод будет вызываться каждый раз, когда ячейка исчезает.

Поскольку вы вызываете метод через UIImageView и существуете ссылку внутри UITableViewCell, вам не нужен RequestReceipt, потому что запрос будет отменен для вас.

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

AlamofireImage — это действительно отличная библиотека, но я думаю, что вы можете получить гораздо больше пользы, используя KingFisher. , он обрабатывает для вас дроссельную заслонку в случае быстрой перемотки вперед и назад и, конечно же, в другом случае, когда ячейка удаляется из очереди, а запрос не завершен.

Тем не менее, эти библиотеки берут на себя всю тяжелую работу за вас, и вам не нужно изобретать велосипед, мой совет: вы узнаете, что происходит за кулисами, и как вы можете это сделать, если этих библиотек еще не существует.

Я надеюсь, что это поможет вам.

person Victor Sigler    schedule 12.09.2016
comment
Спасибо @Victor Sigler! я проверю Кингфишер :) - person Sosily; 12.09.2016
comment
@Victor Sigler, не могли бы вы указать документацию (или, лучше, исходный файл), которая отвечает за дросселирование в KingFisher? - person kean; 12.09.2016