UIImageView 通过 URL 异步加载图片
发布
更新
字数
177
阅读
1 分钟
阅读量
951
可以通过 Data(contentsOf:)
获取图片数据后再通过 UIImage(data:)
得到图片。
import UIKit
import PlaygroundSupport
extension UIImageView {
func load(_ url: URL) {
DispatchQueue.global(qos: .background).async {[weak self] in
guard let data = try? Data(contentsOf: url) else { return }
guard let image = UIImage(data: data) else { return }
DispatchQueue.main.async {
self?.image = image
}
}
}
}
class ViewController:UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
let imageView = UIImageView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
imageView.backgroundColor = .black
view.addSubview(imageView)
imageView.load(URL(string: "https://swift.org/apple-touch-icon-180x180.png")!)
}
}
PlaygroundPage.current.liveView = ViewController()
需要注意避免反复加载的问题,例如在 UITableView
滚动时,反复渲染一个 cell 就可能会产生冗余加载,可以通过缓存 url 的方式判断加载情况,或者使用队列。个人建议使用 KingFisher。
参考: https://www.hackingwithswift.com/example-code/uikit/how-to-load-a-remote-image-url-into-uiimageview