Поиск…


Самый простой способ

Самый простой способ создать это - использовать Alamofire и UIImageViewExtension . Нам нужен табличный вид с ячейкой, в которой есть ImageView, и позволяет называть его imageView .

В функции cellForRowAt: tableView мы загрузим изображение и установим его следующим образом:

let url = URL(string: "https://httpbin.org/image/png")!
let placeholderImage = UIImage(named: "placeholder")!

imageView.af_setImage(withURL: url, placeholderImage: placeholderImage)

URL-адрес должен указывать на изображение, которое вы хотите загрузить, и изображение placeHolder должно быть сохраненным изображением. Затем мы вызываем метод af_setImage на imageView который загружает изображение по указанному URL-адресу, и во время загрузки будет отображаться изображение-заполнитель. Как только изображение загрузится, отображается запрошенное изображение

Убедитесь, что ячейка все еще видна после загрузки

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

Мы все еще будем использовать Alamofire, но мы будем использовать обработчик завершения для отображения изображения.

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

let placeholderImage = UIImage(named: "placeholder")!
imageView.image = placeholderImage

let url = URL(string: "https://httpbin.org/image/png")!

Alamofire.request(url!, method: .get).responseImage { response in
    guard let image = response.result.value else { return }

    if let updateCell = tableView.cellForRow(at: indexPath) {
        updateCell.imageView.image = image
    }
}

В этом примере мы сначала установили изображение на образ заполнителя. Затем мы загружаем изображение с помощью метода request Alamofire . Мы передаем url как первый аргумент, и поскольку мы просто хотим получить изображение, мы будем использовать HTTP-метод .get . Поскольку мы загружаем изображение, мы хотим, чтобы ответ был образом, поэтому мы используем метод .responseImage .

После загрузки изображения замыкание вызывает вызов, и в первую очередь мы гарантируем, что загруженное изображение действительно существует. Затем мы убеждаемся, что ячейка все еще видна, проверяя, что cellForRow (at: indexPath) не возвращает нуль. Если это ничего не происходит, если это не так, мы назначаем недавно загруженное изображение.

Этот последний оператор if гарантирует, что ячейка все еще будет видна, если пользователь уже прокрутил ячейку, а updateCell будет равен нулю, а оператор if возвращает nil. Это помогает нам предотвратить отображение неправильного изображения в ячейке.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow