矢量图像如何在Xcode中工作(即pdf文件)?

Sen*_*ful 168 xcode vector-graphics

矢量支持如何在Xcode 6中工作?

当我尝试调整图像大小时,它看起来是锯齿状的,是什么给出的?

Sen*_*ful 342

如何在Xcode(7和6.3+)中使用向量:

  1. 将图像保存为适当的@ 1x大小的.pdf文件(例如,工具栏按钮为44x44).
  2. Images.xcassets文件中,创建一个新的图像集.
  3. 在" 属性"检查器中,将" 比例因子"设置为" 单个矢量".
  4. 将pdf文件拖放到All,Universal部分.
  5. 现在,您可以按名称引用图像,就像使用任何.png文件一样.

    UIImage(named: "myImage")
    
    Run Code Online (Sandbox Code Playgroud)

如何在旧版本的Xcode(6.0 - 6.2)中使用向量:

  • 按照上述步骤操作,步骤3除外,将" 类型"设置为" 矢量".

向量如何在Xcode中工作

矢量支持在Xcode中令人困惑,因为当大多数人想到矢量时,他们会想到可以向上和向下扩展并且看起来仍然很好的图像.但是,Xcode 6和7没有iOS的完全矢量支持,因此工作方式略有不同.

矢量系统非常简单.这需要你的.pdf形象,并创建@1x.png,@2x.png以及@3x.png资产在构建时.(您可以使用工具检查Assets.car的内容以验证这一点.)

例如,假设您获得的foo.pdf是44x44矢量资产.在构建时,它将生成以下文件:

  • foo@1x.png 在44x44
  • foo@2x.png 在88x88
  • foo@3x.png 在132x132

对于任何尺寸的图像,这都是相同的.例如,如果你有bar.pdf100x100,你会得到:

  • bar@1x.png 在100x100
  • bar@2x.png 在200x200
  • bar@3x.png 在300x300

启示:

  • 您无法为图像选择新尺寸 ; 如果你把它保持在44x44的大小,它只会看起来很好.原因是没有实现完整的矢量支持.这些向量唯一能做的就是节省您保存图像资源的时间.如果你有一个工具(例如一个Photoshop脚本)已经使这个步骤一步到位,你将通过使用pdf向量获得的唯一的东西是未来的支持(例如,如果在iOS 9 Apple开始需要@ 4x资产,这些只会工作),你将有更少的文件要维护.
  • 您应该要求@ 1x大小的所有资产,保存为PDF文件.除此之外,这将允许UIImageViews具有正确的内在内容大小.

为什么它(可能)以这种方式工作:

  • 这使它向后兼容以前的iOS版本.
  • 调整矢量大小可能是运行时的计算密集型任务; 通过这种方式实现它,没有性能命中.

  • 遗憾的是,它不会缩放切片值.因此,如果您在5处切角,则对于2x和3x图像,它不会将其缩放到10和15. (14认同)
  • 好写的.这将在2014年WWDC会议411 - "Interface Builder中的新功能"中讨论,时间为44:13.请注意,他们说光栅化是在构建时完成的.同样有趣的是它在MAC上会在运行时使用向量.在未来的某个遥远的地方,希望iOS也会如此. (8认同)
  • 我如何为XCode 8执行此操作?选项似乎已经消失了! (6认同)
  • @Jesse如果要缩放切片值,可以使用`resizableImageWithCapInsets:`并将切片值除以`[UIScreen mainScreen] .scale,在代码中自己完成. (5认同)

Mar*_*ria 25

在Xcode 8中,您仍然可以添加pdf,创建新的图像集,并在Attributes Inspector中将Scales设置为Single Scale选项. 在此输入图像描述


Sur*_*gch 14

这是@Senseful的优秀答案的补充.

如何制作.pdf格式的矢量图像

我将告诉你如何在Inkscape中这样做,因为它是免费的和开源的,但其他程序应该是类似的.

在Inkscape中:

  1. 创建一个新项目.
  2. 转到文件>文档属性,并将自定义页面大小设置为@ 1x大小(44x44,100x100等),单位为px.
  3. 制作你的作品.
  4. 转到文件>另存为...>可打印文档格式(*.pdf)>保存>确定.(或者,您可以转到"打印">"打印到文件">"输出格式:PDF>打印",但选项不多.)

笔记:

  • 正如在接受的答案中所提到的,您无法调整图像大小,因为Xcode仍会在构建时生成光栅化图像.如果您需要调整图像大小,则应创建一个不同大小的新.pdf文件.
  • 如果您的.svg图像已经是错误的页面大小,请执行以下操作:

    1. 更改页面大小(Inkscape>文件>文档属性)
    2. 选择工作区上的所有对象(Ctrl + A)并调整它们以适应新的页面大小.(按住Ctrl键保持宽高比.)
  • 要将.svg文件转换为.pdf,您还可以找到在线实用程序来为您完成工作.下面是一个例子,从这个答案.这样可以让您轻松设置.pdf大小.

进一步阅读


Dre*_*ren 8

对于那些仍未更新的人,Xcode 9(iOS 11)有所变化.

Cocoa Touch的新功能(WWDC 2017 Session 201)(@ 32:55) https://developer.apple.com/videos/play/wwdc2017/201/

简而言之,资产目录现在包含名为"保存矢量数据"的属性检查器中的新复选框.选中后,PDF数据将包含在已编译的二进制文件中,当然会增加其大小.但它为iOS提供了在两个方向上缩放矢量数据并提供漂亮图像的机会.(有其自身的困难).对于低于11的iOS,使用在答案中向上描述的旧缩放机制.