【问题标题】:CGPathRef encodingCGPathRef 编码
【发布时间】:2009-09-15 20:26:37
【问题描述】:

是否可以对 CGPathRef 变量进行编码?我的意思是 CGPathRef 变量是否有类似 encodeObject:forKey 的方法?

【问题讨论】:

    标签: objective-c cocoa nscoding


    【解决方案1】:

    【讨论】:

    • 非常感谢您。救生员!
    • 哦不,唯一能救我一命的链接现在坏了。
    • 它似乎还不能处理所有路径?有评论说它不支持“椭圆弧”。
    • 另外,许可证是相当政治性的。
    【解决方案2】:

    CGPath 是对象,但我认为您不能对它们进行编码——至少,如果可以的话,它没有被记录在案。您需要自己生成路径的可保存表示,并对其进行编码,然后,当您对该表示进行解码时,您自己将路径从该表示中重生。

    【讨论】:

    • CGPathRefNSBezierPath之间有什么关系吗? NSBezierPath 应该是可序列化的,如果有办法将一个转换为另一个,您可以对 NSBezierPath 进行编码并根据需要转换为 CGPath。 NSBezierPath 让我觉得比 CGPath 更不透明。
    • 不,没有。您必须使用应用程序功能手动转换。这通常并不难,但如果 CGPath 包含二次曲线(一个控制点),则必须将其转换为三次曲线(两个控制点)。
    • 在iOS上,你可以UIBezierPath,它是NSCoding,它实现了一个类方法bezierPathWithCGPath:。见stackoverflow.com/questions/9938864/…
    【解决方案3】:

    Github 上的这个 header 有两个实用字符串来交换 CGPaths 和 NSStrings:

    +(nullable NSString*) svgPathFromCGPath:(CGPathRef)aPath;
    +(nullable CGPathRef) newCGPathFromSVGPath:(NSString*)anSVGPath whileApplyingTransform:(CGAffineTransform)aTransform;
    

    您可以将这些字符串与 NSCoders 一起使用来存储东西。请注意,无论何时在路径和字符串之间进行转换,都可能会因为转换而丢失有效数字。

    我编写了这些例程,它们在 MIT 许可下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多