iOS上可扩展图形的有效技术?

时间:2014-03-25 20:14:47

标签: ios objective-c paint-code

一点背景:我正在开发一款iOS应用程序,它具有各种状态的各种状态图标。这些图标用于各种地方和大小,包括UITableViewCell imageViews,自定义MKMapAnnotations和其他一些点。我实际上有几套包含更静态的状态图标以及将动态文本注入设计的图标。

所以起初我使用静态栅格资产的常规路线,但由于尺寸是动态的,这并不总是最好的解决方案,我对使用CGAffineTransforms的缩放质量并不感到兴奋。所以我换了一些齿轮,尝试了别的东西:

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

那么这给了我什么?那么这是我能看到的利弊。

赞成

  • 完全可扩展的图形,可以在各种不同的场景和环境中轻松使用。
  • 轻松兼容将动态信息添加到图形等文本中。因为我在绘制的所有内容上都有精确的形状数据,所以我不需要对文本框的界限进行猜测,因为我知道所有内容都是如何布局的。
  • 与我可能想要一个栅格化资产的情况兼容,但我仍然可以获得动态视图的所有优势,因为在我需要之前我没有光栅化它。
  • 减少了应用程序的大小,因为我不需要包含栅格资产。

缺点

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

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

1 个答案:

答案 0 :(得分:0)

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