#ios
#iOS
Вопрос:
Я использую следующий метод для загрузки изображений с URL-адреса:
extension UIImage {
public static func loadFrom(url: URL, completion: @escaping (_ image: UIImage?) -> ()) {
DispatchQueue.global().async {
if let data = try? Data(contentsOf: url) {
DispatchQueue.main.async {
completion(UIImage(data: data))
}
} else {
DispatchQueue.main.async {
completion(nil)
}
}
}
}
}
Но пока я нахожу очень медленной загрузку изображений для использования в CollectionView.
Есть ли какой-либо другой способ ускорить загрузку с изображений?
Все изображения размещаются на экземпляре AWS.
Комментарии:
1. Предпочитает
URLSession
большеData(contentsOf:)
. Кроме того, Alamofire, SDWebImage или другая сторонняя библиотека могут управлять кешем и т. Д. Теперь, каков размер изображений? Можете ли вы загрузить «меньшие»?
Ответ №1:
Вы можете попробовать то же самое с URLSession
extension UIImageView {
func downloaded(from url: URL, contentMode mode: UIView.ContentMode = .scaleAspectFit) {
contentMode = mode
URLSession.shared.dataTask(with: url) { data, response, error in
guard
let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
let data = data, error == nil,
let image = UIImage(data: data)
else { return }
DispatchQueue.main.async() { [weak self] in
self?.image = image
}
}.resume()
}
func downloaded(from link: String, contentMode mode: UIView.ContentMode = .scaleAspectFit) {
guard let url = URL(string: link) else { return }
downloaded(from: url, contentMode: mode)
}
}