【问题标题】:supplying the right image size when not knowing what the size will be at runtime在不知道运行时大小的情况下提供正确的图像大小
【发布时间】:2015-12-05 01:44:45
【问题描述】:

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

我不知道运行时图像的高度和宽度是多少,因为各种 iPhone 的屏幕尺寸不同。例如,每个图像在 5S 上为 100x100 显示像素,但在 6+ 上为 130x130。有人建议我提供与屏幕尺寸完全匹配的图像。缩小尺寸时,较大的图像通常会变得像素化且过于锐利。如何解决这样的问题?

【问题讨论】:

    标签: ios image uiimageview uicollectionview image-resizing


    【解决方案1】:

    如果您的图像是使用光栅绘图工具创建的照片或光栅类型图像,那么您必须在某个地方将原件缩放到您想要的尺寸。您可以在 iOS 中运行时执行此操作,也可以使用可以为您提供更好缩放结果的工具预先创建设置。不幸的是,唯一完美的图像将是原始图像,其他一切都是对事实的扭曲。

    对于图标,唯一准确的渲染解决方案是使用矢量图形。 Adobe Illustrator 之类的工具可让您创建可以缩放到不同尺寸而不会失去清晰度的图像。不幸的是,这仍然会让您提前生成图像。您可以使用大多数工具编写这一代的脚本,并且假设您的图像都是正方形的,那么所需的总数并不大。 iPhone 最多需要 3 个(4/5 宽度相同,6 和 6+),iPad 最多需要 2 个(@1 用于 mini/ipad1,@2 用于视网膜)。

    虽然我知道 iOS 没有直接支持矢量图像渲染,但有一些 3rd 方工具。 http://www.paintcodeapp.com/ 是一个示例,它似乎可以让您导入矢量图像或绘制矢量图像,然后生成图像代码以在您的应用程序中运行。这种工具会给你你想要的,因为图像现在是在运行时以你选择的比例绘制的矢量图。不过 99 美元。

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

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

    【讨论】:

      【解决方案2】:

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

      我不知道运行时图像的高度和宽度是多少,因为各种 iPhone 的屏幕尺寸不同。例如每个图像在 5S 上是 100x100 显示像素,但在 6+ 上是 130x130

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

      【讨论】:

      • 感谢您的光临。我使用了一个小技巧来处理 6+/6s+ 的屏幕尺寸。我提供了一些不寻常的图像尺寸:1x 为 100x100,2x 为 200x200,如预期的那样,但使​​用 390x390 为 3x。我仍然必须处理 6/6s。可以通过查询 UIScreen 的大小来做到这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多