我们是不是应该在将图像设置为 UITableView 中的 imageView 之前缩放图像

Posted

技术标签:

【中文标题】我们是不是应该在将图像设置为 UITableView 中的 imageView 之前缩放图像【英文标题】:Should we scale image before setting it to a imageView in UITableView我们是否应该在将图像设置为 UITableView 中的 imageView 之前缩放图像 【发布时间】:2016-03-07 06:34:07 【问题描述】:

我正在显示带有名称的图像列表,带有 V 形配件以查看所选图像的完整尺寸版本。

我看到滚动性能不是超级流畅。我认为原因是我分配给每个单元格的 imageView 的图像是全尺寸图像(在显示之前会自动缩小)。

如果我保持较小的“缩略图”大小的图像,性能会提高吗?如果是,最好的方法是什么?我在How to resize images in UITableViewCell? 中看到了一些示例。使用以下方法的答案(转载如下)是否足够好?

另外,还有其他使滚动更流畅的技巧吗?

 CGSize itemSize = CGSizeMake(30, 30);
 UIGraphicsBeginImageContext(itemSize);
 CGRect imageRect = CGRectMake(30.0, 30.0, itemSize.width,  itemSize.height);
 [thumbnail drawInRect:imageRect];
 cell.imageView.image = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();

【问题讨论】:

【参考方案1】:

是的,缩小图像有很大帮助。我创建了下面的方法来调整跟随的大小(并在后台线程上调用它以保持主 UI 线程嗡嗡声)

我还发现,仅在更改的行上调用 reloadData 有助于使用

 [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; 

用于缩小尺寸的方法。

 - (UIImage *) returnThumbnail:(UIImage*)image

 CGSize itemSize = CGSizeMake(120, 90);
 UIGraphicsBeginImageContext(itemSize);
 CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width,  itemSize.height);
 [image drawInRect:imageRect];
 UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
 NSLog(@"Returning scaled image %@",scaledImage) ;
 return scaledImage ;

【讨论】:

以上是关于我们是不是应该在将图像设置为 UITableView 中的 imageView 之前缩放图像的主要内容,如果未能解决你的问题,请参考以下文章

将 GestureRecogniser 附加到多个图像视图

在将数据库引擎升级到 PostgreSQL 12 时,是不是也应该为“pg”gem 更新 Gemfile?它们有啥关系?

SQL Server 在将值转换为字符串/从字符串转换时是不是考虑文化/区域设置?

在将图像分配给 img 标签之前使用 javascript 调整图像大小

在将线性强度图像显示在 DICOM 校准显示器上之前,是不是需要对它们进行特殊处理?

从 API 加载图像