【问题标题】:CGPathRef and PDFCGPathRef 和 PDF
【发布时间】:2011-09-28 20:51:44
【问题描述】:

它有一种方法可以使用 CorelDraw 或 Adob​​e Flash 等应用程序绘制复杂的形状,将其保存或导出为 PDF,然后在 iOS 中使用 Core Graphics 打开它。 这个想法是,用 CorelDraw 绘制一个形状,一个矢量 - 例如,它只是路径。没有颜色或填充。然后可以直接通过 Core Graphics 打开它,将其作为 CGPath 添加到上下文中,然后可以对其进行操作,例如用纯色或渐变或图案填充它。

底线是,我正在寻找一种在用户友好的环境(如 Corel 或 Flash)中绘制复杂形状的方法,并将其导出为可在 Core Graphics 中操作的 vactor。并且非常感谢您的建议或帮助。

谢谢。

【问题讨论】:

    标签: ios pdf core-graphics


    【解决方案1】:

    SVGKit 的工作方式也不完全符合我的需要。虽然我应该说它做得很好。我还找到了其他资源,如果有人在这篇文章中停下来并正在寻找解决方案,我会将它们留在这里以供将来参考。

    Converting SVG Paths to Objective-C Paths 适用于简单路径;稍后可以使用协议来操作笔触和填充。复杂的路径会混淆。

    SVGKit 非常适合创建图像并在以后的程序过程中为它们设置动画。但是,笔触、填充、路径无法操作。

    Opacity您可以导出为源代码,因此您可以更好地控制笔触、路径和填充。随着路径变得越来越复杂,手动管理代码变得更加困难。另一个问题是在导出时,程序添加了与分辨率相关的代码。通过大约 300 多行代码来修复它可能会很痛苦,这样它就不会依赖于分辨率。最终产品不会被混淆,并且可以通过协议进行操作。图层是 CGLayers,而不是 CALayers。

    【讨论】:

      【解决方案2】:

      如您所说,如果您有 PDF 文件(来自 Corel 或其他应用程序),您可以使用 CoreGraphics 显示它们。

      看看:

      然后,有一个 CGContextDrawPDFPage 函数,您可以使用它在给定的图形上下文中绘制 PDF 页面,通常在 UIView 子类的 drawLayer: inContext: 方法中。

      【讨论】:

      • 谢谢。我知道这些方法。这不正是我要找的。我正在尝试将 PDF 文件中的路径引用添加到 CGContext,同时保留它们的 CGPath 属性。那些方法基本上是绘制PDF,绘制的PDF不响应CGContextFillRect等函数。
      • 是的,但是您需要使用传递给drawLayer:inContext: 方法的上下文。它只是CGContextRef 的一个实例,所以它应该响应...首先在上下文中绘制 PDF 页面,然后根据需要修改上下文。
      • 它不起作用。试试这个方法:(1) 在 Flash 或 Corel 中画一个圆圈——没有填充,只是描边,(2) 将它保存/导出为 PDF,(3) 将它添加到你的 Xcode 项目资源中,(4) 打开它作为 CGPDFDocument,获取第一页并将其绘制到上下文(CGLayer 或 UIGraphics,没有区别)(5)调用 CGContextFillRect(上下文); ---如果它符合我的要求,你应该得到一个圆圈,用黑色填充。但它不会发生,因为绘制到上下文的 CGPDFPage 不表现为路径。我希望它会。
      【解决方案3】:

      实际上并没有从文件加载CGPaths 的内置方法,但您可能想看看SVGKit。几乎所有现代矢量绘图应用程序都可以生成 SVG 文件。

      【讨论】:

      • 看起来很吸引人。我会试一试。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      相关资源
      最近更新 更多