1

一点背景知识:我正在开发一个 iOS 应用程序,该应用程序具有用于各种状态的各种状态图标。这些图标用于各种位置和大小,包括 UITableViewCell imageViews、自定义 MKMapAnnotations 和其他一些位置。实际上,我有几个集合,其中包括更静态的状态图标以及在设计中注入动态文本的图标。

因此,起初我采用了使用静态栅格资产的传统路线,但由于尺寸是动态的,这并不总是最好的解决方案,而且我对使用 CGAffineTransforms 的缩放质量并不感到兴奋。因此,我改变了一些方式并尝试了其他方法:

  • 为每个高级图标类创建了一个自定义 UIView 子类。它将从中派生状态的模型对象作为输入(我想我也可以使用枚举并将其加载到某种模型构造函数中,但这就是我的做法),因此它可以决定需要绘制什么,然后在drawRect中进行必要的绘图。由于所有绘图都基于视图边界,因此它可以缩放到任何合理的尺寸。
  • 创建了一个具有类方法构造函数的类别,该构造函数接受模型输入以及您要使用的大小并构造自定义视图。
  • 由于我还希望将这些图标的光栅化版本插入某些位置(例如 UITableViewCell imageView),因此我还创建了构建视图并使用快速 iOS7 快照功能返回 UIImage 的构造函数。

那么这给了我什么?好吧,这是我可以看到的优点/缺点。

优点

  • 完全可扩展的图形,可轻松用于各种不同的场景和上下文。
  • 轻松兼容向图形(如文本)添加动态信息。因为我对我正在绘制的所有内容都有确切的形状数据,所以我不需要猜测文本框的边界,因为我知道所有内容的布局方式。
  • 与我可能需要光栅化资产但我仍然可以获得动态视图的所有优点的情况的兼容性,因为我不会在需要它之前对其进行光栅化。
  • 减少应用程序的大小,因为我不需要包含栅格资产。

缺点

  • 首先创建绘图代码的工作流程并不理想。对于简单的东西,我可以直接在代码中完成,但对于更复杂的东西,我需要在 Illustrator 或 Sketch 中创建矢量资源,然后将其引入 PaintCode 并将生成的绘图代码清理为更精简的内容。这不是最理想的过程。

所以问题是:有没有人对如何处理这种情况有更好的建议?我还没有找到大量关于这类事情的技术材料,我想知道我是否错过了一种更好的处理方法,或者这里是否有任何隐藏的陷阱......性能似乎没有是我用我的方法测试的一个问题,但我还没有在 iPad3 或 iPhone 4 上测试过它,所以仍然可能有一些未知数。

4

1 回答 1

0

您可以尝试SVGKit,它可以绘制 SVG 文件,并且可以UIImage根据需要导出到 .

于 2014-03-25T21:03:56.173 回答