代码之家  ›  专栏  ›  技术社区  ›  Ross

iPhone“导入/绘制用户界面图形元素的最佳方法”?CGContextDrawPdfPage?

  •  1
  • Ross  · 技术社区  · 16 年前

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

    我遇到过 CGContextDrawPDFPage Panic的 Shrinkit . 我应该使用PDF来存储矢量用户界面图形并使用 CGContextDrawPDF页面 画它们。

    之前我问过 what way Apple store their UI graphics 被粉碎的巴布亚新几内亚回答。我能想到的选择如下,但我也对其他技术感兴趣…

    1. PNG(位图图像)
    2. 自定义uiview绘图代码(生成自 Opacity )
    3. pdf(我没有用过这个方法,是用cContextDrawPdfPage吗?)

    这个问题只适用于矢量图形(但我想有些人可能只使用位图?).寻找什么是标准的/最有效的/最有效的。

    编辑:boundy补充说,我很感兴趣听到任何人谁与用户界面设计师,或自己是一个用户界面设计师的过程。以及有关分辨率独立性的指针,即iPad/iPhone高清未来验证。

    多谢 罗斯

    2 回复  |  直到 14 年前
        1
  •  1
  •   mohsenr    16 年前

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

    1. 正在创建自定义uiview。
    2. 在CGlayer中绘制。
    3. 从PDF加载。

    每种方法都有其优势,具体取决于您想做什么:

    uiview与cglayer

    在性能(一次性绘图)和易用性方面,两者之间不应该有太大的差异(有微小的差异,但没有严重的差异)。显然,不透明度可以为两者导出源代码(我没有亲自使用它)。也就是说,在选择之前,你应该考虑一些事情:

    1. 如果你有一个固定的图像(你的问题是这样建议的),使用cglater。CGlayer对象将缓存在图形设备上,因此重新使用它们要快得多。即使清除了缓存,您仍在使用同一对象重新绘制,这意味着不需要重新创建它。
    2. 另一方面,如果您需要在用户与应用程序交互时更改绘图,uiview 能够 更快,因为您可以灵活地更新图像的一部分而不是整个视图。
    3. CGlayer独立于UI。因此,同样的代码也适用于Mac/iPhone/iPad,甚至可以保存到文件中。

    结论 :使用cglayer,除非是特殊情况。

    CGLAYER(代码绘图)与PDF(从文件加载)

    我没有这方面的任何基准,但我希望CGlayer速度稍微快一点:(1)不需要读取文件。(2)PDF命令应转换为系统的图形元素,这或多或少与创建CGlayer相同。(3)我不确定如何缓存PDF页面,但我不希望它比CGlayer更快。不管怎样,除非你想优化到最后一毫秒,否则所有这些都不会有太大的区别。同样,选择应该基于您的用例:

    1. CGLAYER给你更多的灵活性 在代码中 . 您只有通过 CGContextDrawPDFPage 这意味着,即使是简单的任务,如缩放/转换图形也将更加困难。
    2. 另一方面,使用PDF更灵活 完成代码后 . 您可以随时用一个新的PDF文件更新PDF文件,从Web加载它,等等。
    3. 创建PDF可能比对图形进行编码更容易。你可以使用任何你想要的应用,你不需要担心API和系统资源。毕竟,代码可以输出一个PDF文件,而不是反过来。

    结论 :如果您不需要对图形做太多操作(只想显示图标或其他内容),请使用PDF。如果您需要在应用程序中处理它,请考虑CGLAYER。

    当然,您可以根据自己的需要混合各种方法:例如,加载一个PDF文件,将其放入一个CGlayer来调整它,用一个uiview绘制它,您可以在上面放置一个徽章!

        2
  •  1
  •   Community Mohan Dere    9 年前

    我在这个问题上犹豫不决,因为我也有一个关于PDF的问题。我正在与一个UI设计器合作,我们成功地使用pdfs创建UI元素。例如:对于一个按钮,我们有3个PDF用于打开、关闭和阴影。我写了一段代码,将PDF转换为uiimage。它可以缩放生成的图像,甚至可以对其着色,使其具有一个用于多种按钮样式的模板。它工作得很好:)

    我们的问题是,如果没有质量损失,我们就不能放大矢量图形。这就是为什么我们决定使用足够大的图形,我们只需要缩小它们。但我仍然想知道是否有一种方法可以在将PDF绘制到上下文并创建uiimage之前将其放大。这是我的 post .