iPhone - 导入/绘制UI图形元素的最佳方法? CGContextDrawPDFPage?

时间:2010-05-26 15:03:40

标签: iphone cocoa user-interface

  

在iPhone上使用自定义UI图形的最佳方法是什么?

我遇到CGContextDrawPDFPage和恐慌Shrinkit。我应该使用PDF来存储我的矢量ui图形并使用CGContextDrawPDFPage加载它们来绘制它们。

之前我问过what way Apple store their UI graphics并且被压了png。我可以想到的选项如下,但我也对任何其他技术感兴趣...

  1. PNG(位图图片)
  2. 自定义UIView绘图代码(从Opacity生成)
  3. PDF(我没有使用过此方法,是否使用CGContextDrawPDFPage?)
  4. 这个问题仅针对矢量图形(但我想有些人可能只使用位图?)。寻找标准/最有效/最有效的方法。

    编辑:Bounty补充说,我很想听听任何与UI设计师合作的人的过程,或者他们自己都是UI设计师。关于分辨率独立性的指示,即iPad / iPhone HD的未来验证。

    非常感谢 罗斯

2 个答案:

答案 0 :(得分:1)

我可以建议3种不同的方式,其中2种已经提到过:

  1. 创建自定义UIView。
  2. 使用CGLayer绘图。
  3. 从PDF加载。
  4. 每个都有自己的优势,具体取决于你想做什么:

    UIView vs CGLayer

    就性能(一次性绘图)和易用性而言,两者之间应该没有太大差异(存在细微差别,但没有什么严重的)。显然,Opacity可以为两者导出源代码(我没有亲自使用它)。也就是说,在选择之前应该考虑一些事项:

    1. 如果您有固定图像(您的问题建议如此),请使用CGLayer。 CGLayer对象将缓存在图形设备上,因此重新使用它们要快得多。即使清除缓存,您仍然使用相同的对象进行重绘,这意味着无需重新创建它。
    2. 另一方面,如果您需要在用户与应用交互时更改您的绘图,UIView 可以更快,因为您可以灵活地更新图像的一部分而不是整个观点。
    3. CGLayer独立于UI。所以相同的代码适用于Mac / iPhone / iPad,甚至可以保存到文件。
    4. 结论:使用CGLayer,除非是特殊情况。

      CGLayer(代码图)和PDF(从文件加载)

      我没有任何基准,但我希望CGLayer稍微快一点:(1)不需要读取文件。 (2)pdf命令应转换为系统的图形元素,这与创建CGLayer大致相同。 (3)我不确定如何缓存pdf页面,但我不认为它比CGLayer更快。无论如何,除非你想要优化直到最后一个毫秒,所以这一切都不应该有太大的区别。同样,选择应基于您的用例:

      1. CGLayer在代码中为您提供更多灵活性。您对pdf页面的唯一访问权限是通过CGContextDrawPDFPage,这意味着即使是简单的任务,例如缩放/转换绘图也会更难。
      2. 另一方面,使用PDF,在完成代码后更灵活。您可以随时使用新的pdf文件更新,从Web加载等等。
      3. 创建pdf比编码绘图更容易。您可以使用任何您想要的应用程序,您无需担心API和系统资源。毕竟,代码可以输出pdf文件,而不是相反。
      4. 结论:如果您不需要对绘图做很多事情(只想显示图标或其他内容),请使用pdf。如果您需要在应用程序中处理它,请考虑使用CGLayer。

        当然,您可以随时根据需要混合使用方法:例如:加载一个pdf文件,把它放在CGLayer中进行调整,用UIView绘制它,你可以在上面放一个徽章!

答案 1 :(得分:1)

我偶然发现了这个问题,因为我对PDF也有疑问。我正在与UI设计师合作,我们成功地使用PDF来创建UI元素。例如:对于一个按钮,我们有3个PDF用于ON,OFF和阴影。我写了一段代码,将PDF转换为UIImage。它可以缩放生成的图像,甚至可以将其着色,以便为多种样式的按钮设置一个模板。它的效果非常好:))

我们的问题是我们无法在没有质量损失的情况下扩展矢量图形。这就是为什么我们决定使用足够大的图形,我们只需要缩小它们。但我仍然想知道在将PDF绘制到上下文并创建UIImage之前是否有办法扩展PDF。这是我的post