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

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

Пример:

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

Кстати, я видел пример кода, который демонстрационное приложение AlamofireImage,

override func prepareForReuse() {
    super.prepareForReuse()

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

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

Помогите:)

1 ответ

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

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

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

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

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

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

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

Другие вопросы по тегам