Xcode 6允许矢量图像资产... 如何使用它们?

当我在处理 Xcode 6和图像资产时,我注意到了 非常的一些有趣的东西: 我们现在可以在它们中指定矢量图像(在选择 Images.xcassets 之后,请查看实用工具窗格)。

我尝试了一个小应用程序(包含一个大的 UIImageView)。SVG 图像(不工作) ,然后一个。EPS (也不起作用) ,最后我试了一个。成功了!虽然我看到了图像,但看上去像素化了,没有矢量化。

因此,苹果似乎正在为矢量图标/图像做准备。不再有无数版本的应用程序图标,不再有“@2x”图像。但是有人能解锁这个功能吗?

62992 次浏览

下面是如何在 Xcode 6的资产目录中实验矢量图像:

  1. 制作一个新的图像集。

  2. 在图像集中选择一个空白图像插槽,并将属性检查器中的弹出窗口切换到 Vector。您现在有了一个通用的图像插槽。

  3. 拖动一个向量 PDF 到该插槽中。

现在,无论在什么地方使用这个图像,它都会根据上下文调整大小(例如固定大小的图像视图) ,而不需要栅格化,如下图所示:

enter image description here

尽管有这个答案,更大的 PDF 图形 曾经是光栅化。但是现在,请参阅 https://stackoverflow.com/a/45623000/341994: 在 Xcode 9中,矢量 PDF 可以正确地缩放,而不需要栅格化。

EDIT 在 Xcode 11中,这个公式可以工作: 在资产目录中,您必须将 Scales 弹出菜单设置为 Personal Scales,并将基于矢量的图像放入1x 槽中。检查保存矢量数据。成交。

下面是我在对矢量资产进行一些实验后的一些想法:

1. 编译时间支持

经过几次试验,我相信它只是一个编译时间支持。Xcode 在编译时生成所有1x、2x 和3x 映像。这意味着它可以在旧版本的 iOS 上运行。同时,这意味着在最终的构建中,它仍然是 PNG 格式,并且无法从矢量文件获得更大的无损图像。

2. 为什么用 PDF 代替 SVG 或其他格式

对于 SVG 和其他格式,矢量图像没有实际的大小信息,而 PDF 有大小信息。我认为 Xcode 6所做的是使用 PDF 中的大小信息作为实际的显示大小,然后从矢量图像生成2 x 3 x 文件。

Size info in PDF

3. PDF 文件的大小并不重要

一开始,我们担心 PDF 会比 PNG 大得多。我们尝试了 http://smallpdf.com/压缩它,它工作得很好。但是,如果原始的 PDF 文件不包括在建设,因为我以前说,那么文件大小的 PDF 没有关系。

如果我发现任何其他东西,将继续编辑这篇文章。

编辑14-09-25

@ mredg 提到,对于 iOS,它在编译时生成位图,但对于 OSX,它包含可伸缩形式的矢量图像。

Via: http://martiancraft.com/blog/2014/09/vector-images-xcode6/

我只是创建一个自定义字体,比如说,图标,甚至应用标识类型和使用它的方式,并拉到我的应用程序。然后我可以很容易地调整设备和屏幕分辨率的字体大小。

你可以使用这个在线工具把你的图像从 svg 转换成 pdf

Http://www.fileformat.info/convert/image/svg2pdf.htm

1-上传图像

2-选择宽度: 24px,高度: 24px

3-拷贝到你的 xcode 项目

4-转到 Images.xcassets

右击并创建新的图像集

6-从右侧面板选择(属性检查器)

7-向量更改类型

8-拖放你的 pdf 图片

9-在你的项目中使用它

一个小贴士-用@2x 创建 PDF@2x 解析度和文件名(myfile@2x.PDF) 做到这一点,你会得到完美的锐化和对比图像,特别是 iPad 2和迷你。 enter image description here

如果你正在寻找问题的答案: “我怎样才能在我的 iOS 应用程序中使用矢量图形,并且总是以完美的比例缩放它们呢?”,那么我可以强烈推荐 UIImage+PDFhttps://github.com/mindbrix/UIImage-PDF

我发现这种方法非常有效。我现在不再拥有三种不同分辨率的 PNG 格式的所有图片,而是为每张图片提供一个小小的 PDF 文件。我可以显示如下:

// Objective C:
self.icon.image = [UIImage imageWithPDFNamed:@"icon.pdf" fitSize:self.icon.frame.size];


// Swift:
icon.setImage(UIImage(PDFNamed: "icon.pdf", fitSize: icon.frame.size))

除了 fitSize:之外,还有 atWidth:atHeightatSize:

我使用 UIImage+PDF的所有图像,可以向量化,只有使用 PNG 仍然为照片图像。

我也运行我的 PDF 文件通过类似 http://smallpdf.com/compress-pdf的东西,以确保最小的文件大小为他们。

艾瑞克

In cases where you are building app icons, PDF won't work. You might want to take a look at a project I just built a project called [强烈][特异][强烈]. It can build PNG, PDF, etc... from source images including SVG files. Feedback would be greatly appreciated.