iOS|iOS 加载网络图片&瀑布流&cell高度自适应
【iOS|iOS 加载网络图片&瀑布流&cell高度自适应】写在前面吧:思路就如上所述,具体代码如下:
现目前是这样的
:有数量不等的图片需要瀑布流显示,每张图片高宽度各有不同
初步思路
:根据上述问题需求,可知,使用表视图为最佳方式
关键
: 图片高宽度不定,cell需要动态计算高度;图片需做缩放处理,适应屏幕
使用SDWebImage下载图片
1、计算cell高度
(前提是已做好数据请求处理)
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
// 先从缓存中查找图片
UIImage *image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:self.sdwebArr[indexPath.row]];
if (!image) {
image = [UIImage imageNamed:@"store_no_data"];
}
//H = H*(SCREEN_WIDTH/W) = 高度*(屏幕/图片宽)
CGFloat imageHeight = image.size.height * SCREEN_WIDTH/image.size.width;
return imageHeight;
}
2、cellForRowAtIndexPath
(调用configureCell: atIndexPath:方法)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
ShopDetailCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
if (cell == nil) {
cell = [[ShopDetailCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
}
[self configureCell:cell atIndexPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
3、调用
(downloadImage: forIndexPath:)
- (void)configureCell:(ShopDetailCell *)cell atIndexPath:(NSIndexPath *)indexPath {
NSString *imgURL = self.sdwebArr[indexPath.row];
UIImage *cachedImage = [[SDImageCache sharedImageCache]imageFromDiskCacheForKey:imgURL];
if (!cachedImage) {
[self downloadImage:self.sdwebArr[indexPath.row] forIndexPath:indexPath];
}else{
[cell.imgBtn setBackgroundImage:cachedImage forState:UIControlStateNormal];
}
}
4、下载对应图片、使用GCD回到主线程刷新UI
- (void)downloadImage:(NSString *)imageURL forIndexPath:(NSIndexPath *)indexPath {
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:imageURL] options:SDWebImageDownloaderUseNSURLCache progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
//nothing to do
} completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {
[[SDImageCache sharedImageCache] storeImage:image forKey:imageURL toDisk:YES completion:^{}];
dispatch_async(dispatch_get_main_queue(), ^{
[self.detailTableView reloadData];
});
}];
}
结束语:
感谢icefishlily的blog
当你以为你已经够努力时,你总会遇到更优秀的人,见到更不可思议的风景。
诸君,共勉之~
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- 猎杀IP
- 2020-04-07vue中Axios的封装和API接口的管理
- iOS中的Block
- 使用composer自动加载类文件
- 自媒体形势分析
- 数学大作战
- 2018.03.18
- 星期天的下午茶(一)
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片