Отменить загрузку изображения с помощью 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, он справляется с управлением в случае ускоренной перемотки вперед и назад и, конечно, в другом случае, когда ячейка отключается и запрос не завершен.
Тем не менее, эти библиотеки выполняют всю тяжелую работу за вас, и вам не нужно изобретать велосипед. Мой совет - вы узнаете, что происходит за кулисами, и как вы можете это сделать, если эти библиотеки еще не существуют.
Я надеюсь, что это поможет вам.