在不知道运行时的大小时提供正确的图像大小

时间:2015-09-09 07:38:58

标签: ios image uiimageview uicollectionview image-resizing

我在集合视图中显示图像网格(3rows x 3列)。每个图像都是正方形,其宽度确定为collectionView宽度的1/3。集合视图固定在mainView的左右边距。

由于各种iPhone的屏幕尺寸不同,我不知道图像高度和宽度在运行时是什么。例如,每个图像在5S上将是100x100显示像素,而在6+上是130x130。我被建议提供与屏幕尺寸完全匹配的图像。当缩小尺寸时,较大的图像往往会变得像素化并且过于尖锐。如何处理这样的问题?

2 个答案:

答案 0 :(得分:1)

如果您的图像是使用光栅绘图工具创建的照片或光栅类型图像,那么在某处您必须将原始图像缩放到所需的尺寸。您可以在iOS中运行时执行此操作,也可以使用可以为您提供更好缩放结果的工具创建预设。不幸的是,唯一完美的形象将是原作,其他一切都是对真相的歪曲。

对于图标,唯一准确的渲染解决方案是使用矢量图形。像Adobe Illustrator这样的工具可以让您创建可以扩展到不同大小的图像,而不会失去清晰度。不幸的是,这仍然让你在前面生成图像。你可以使用大多数工具编写这一代的脚本,并且如果你说你的图像都是方形的,那么所需的总数并不是很大。最多需要iPhone 3(4/5宽度相同,6和6+)和iPad 2(迷你/ ipad1 @ 1,视网膜@ 2)。

尽管iOS对于矢量图像渲染没有直接的支持,但还是有一些第三方工具。 http://www.paintcodeapp.com/是一个示例,它可以让您导入矢量图像或绘制矢量图像,然后生成图像代码以在您的应用程序中运行。这种工具可以为您提供所需的图像,因为现在的图像是在运行时选择的比例绘制的矢量图。 99美元。

还有SVGKit(https://github.com/SVGKit/SVGKit),但不确定这有多好/坏。它似乎让你只需从SVG文件加载和直接渲染。可能值得一试。

总而言之,我认为您使用可以控制输出的工具预先生成相对较小的子集,在iOS中获取命中并让它缩放图像或使用第三方矢量到图像渲染工具包会给你你想要的东西。

答案 1 :(得分:1)

通常的解决方案是提供三个版本,分别用于单分辨率,双分辨率和三分辨率屏幕,并在首次需要图像时通过将drawInRect重新绘制到图形上下文中来实时缩小尺寸。 / p>

  

由于各种iPhone的屏幕尺寸不同,我不知道图像高度和宽度在运行时是什么。例如,每个图像在5S上将是100x100显示像素,而在6 +上是130x130

好的,所以你的第一句话是谎言。第二句证明您知道不同屏幕尺寸的大小。显然,如果我告诉你设备的名称,你可以告诉我你认为图像大小应该是什么。因此,如果您不想在运行时缩小较大的图像,因为您不喜欢产生的质量,只需为每个设备提供正确尺寸和分辨率的实际图像,并在实际设备上使用正确的图像类型发现自己正在奔跑。