为什么我不使用PDF作为iOS资产
我理解这种吸引力。生成更少的资产并自动支持当前和未来的显示密度似乎既有吸引力又方便。
在引擎盖下,Xcode在构建时将PDF转换为相关尺寸的PNG,因此运输二进制文件与使用PNG创建的应用程序非常相似。文件大小可能略有不同,因为PNG是由Xcode创建的,但最终它们非常相似(使用ImageOptim或为某些资产选择PNG8可能会给非PDF应用程序带来优势)。
在文件和性能方面,正在运行的应用程序几乎相同。这与网络不同,使用SVG可以带来许多好处。它也不同于Android的矢量绘图,后者在运行时绘制,如Web SVG。
使用PDF for iOS应用程序资产的唯一好处是方便起见,如果PDF文件格式对许多类型的界面资产来说并不糟糕,那也没关系。
便携式文档格式(PDF)非常适合其预期用途——作为打印设计工具中生成的内容、屏幕和打印输出的文档格式。就功能而言,它在PostScript中的起源非常明显。而且,鉴于Display PostScript在NeXT上的使用,苹果在macOS中对PDF支持也就不足为奇了。
1×位图#
您选择的设计工具中的许多功能将保存为1×位图——模糊的形状、一些遮罩、图层样式、阴影和其他效果通常作为位图图像存储在PDF中,1×位图图像。
当PDF由Xcode缩放时,您的2×和3×资产将从资产这些部分的1×位图创建,因为这是PDF包含的全部内容。结果真的很差。
上面的左侧示例显示了由模糊形状创建的PNG。Xcode从同一艺术品的PDF创建的PNG资产显示在右侧。注意位图缩放工件。
蒙面#
屏蔽也是一个问题。上面的示例显示了一个具有内发光效果的红色圆圈。通过右侧的抗锯齿显示红色像素,PDF版本。在PDF中,内部效果是独立的元素。在保持正确的抗锯齿的同时,无法将一个物体夹在另一个物体上。(我知道上面的内部效果示例并不完全匹配。)
我怀疑许多类型的渐变也会被很好地呈现为PDF,但我没有做任何测试来确认。
效果的位图缩放和糟糕的屏蔽支持是反对将PDF用于iOS界面资产的最有力的论点。
由Quartz渲染#
macOS 的 2D 渲染引擎 Quartz 非常棒。但是,如果您使用的是不使用Core Graphics绘图的设计工具,那么您在设计时看到的很可能会与Xcode的PDF渲染生成的输出不同。Photoshop的抗锯齿和渐变渲染与石英相当不同。
您的设计工具可能为您提供最终应用程序的准确表示,也可能不为您提供最终应用程序的准确表示。如果你关心你的工作质量,这是一个重大问题。
相比之下,使用PNG资产意味着一切都与位匹配——正在运行的应用程序与模型的图像差异表明结果相同。
资产不能在其他地方使用#
PDF不能用于网络或Android资产。Mac app 可以使用 PDF 资源,并且在运行时呈现,比 iOS 的实现带来许多好处。
不支持專色#
macOS 的 PDF 渲染不支持打印专色。对于界面设计来说,这应该根本不是问题。我在这里提到它只是为了完整性(尽管在极少数情况下它可能会引起问题)。
Xcode 9和保存矢量数据#
Xcode 9对资产目录的更改以及对在应用程序包中包含PDF的支持不会改变上述建议。即使使用iOS 11部署目标,Xcode仍然会从您的PDF中生成PNG。这是我创建的小型测试应用程序的资产目录。它包含一个PDF。
但是,当应用程序构建时,资产目录现在包含3个PNG。这些PNG也与您自己创建的PNG不同。Xcode的PNG总计20837字节,从Sketch导出它们会产生17324个字节,并通过ImageOptim运行Sketch PNG,无损压缩将它们进一步减少到4115字节。在这种情况下,使用PDF与使用PNG相比,资产占用了磁盘空间的5倍。
PDF资产可能有用#
如果您意识到它们的局限性,并有选择地使用PDF,它们非常适合单色字形等。也可以在同一项目中使用PDF和PNG的组合,因此您可以将其使用限制在合理的地方。
对我来说,保存PDF比为1×、2×和3×保存PNG更重要。没有任何好处,只有潜在的渲染和质量问题,以及更大的文件。我不愿意做出这些权衡,即使使用PDF更方便。
这就是为什么我不使用PDF作为iOS资产。