我们如果用过QQ,微博都知道如果朋友圈刷新,显示别人发的微博或者动态显示单张图片,其实宽高比是和用户上传的照片的宽高比是一样的。这样对用户的视觉效果来说是比较好了,如果我们把显示单张图片的宽高固定死了,那可能用户体验就不会太好。如果我们想显示按照比例显示的话。我们有两种方法
一种就是把图片的二进制数据下载到本地,然后再将这个二进制数据转换成图像,然后我们就能知道这个图像的宽和高了。
另外一种就是服务器后台要支持,我们去调用接口去获取每一张图片的大小,然后把界面的布局做好,然后再异步加载图片就好了。
private func cacheSingleImage(dataList:[StatusViewModel]) -> Void
{
//想要判断下载数据的长度
var dataLength = 0
//创建一个调度组
let group = DispatchGroup()
//遍历视图模型,判断图片是不是单张的
for vm in dataList
{
//判断当前的图片是不是只有一张
if vm.thumbnailURLs?.count != 1
{
continue
}
//获取图片的URL
let url = vm.thumbnailURLs![0]
//入组,监听后续的block
group.enter()
//如果是一张图片,我们就去下载,下载完成的操作也不需要做,因为SDWebImage会帮我们做好,下载单张图片,如果本地缓存已经存在了,同样会完成回调,然后返回
SDWebImageManager.shared().loadImage(with: url, options: [],
progress: nil, completed: { (image, _, _, _, _, _) in
//表示单张图片下载成功
if let img = image,
//将image转换成png形式的二进制数据
let data = UIImagePNGRepresentation(img)
{
dataLength = dataLength + data.count
print("------")
}
//出组
group.leave()
})
}
//在这里可以做下载完成的操作
group.notify(queue: DispatchQueue.main) {
//输出下载了多少单张图片
print("\(dataLength/1024)Kb")
}
}