【发布时间】:2009-09-15 20:26:37
【问题描述】:
是否可以对 CGPathRef 变量进行编码?我的意思是 CGPathRef 变量是否有类似 encodeObject:forKey 的方法?
【问题讨论】:
标签: objective-c cocoa nscoding
是否可以对 CGPathRef 变量进行编码?我的意思是 CGPathRef 变量是否有类似 encodeObject:forKey 的方法?
【问题讨论】:
标签: objective-c cocoa nscoding
【讨论】:
CGPath 是对象,但我认为您不能对它们进行编码——至少,如果可以的话,它没有被记录在案。您需要自己生成路径的可保存表示,并对其进行编码,然后,当您对该表示进行解码时,您自己将路径从该表示中重生。
【讨论】:
CGPathRef和NSBezierPath之间有什么关系吗? NSBezierPath 应该是可序列化的,如果有办法将一个转换为另一个,您可以对 NSBezierPath 进行编码并根据需要转换为 CGPath。 NSBezierPath 让我觉得比 CGPath 更不透明。
UIBezierPath,它是NSCoding,它实现了一个类方法bezierPathWithCGPath:。见stackoverflow.com/questions/9938864/…
Github 上的这个 header 有两个实用字符串来交换 CGPaths 和 NSStrings:
+(nullable NSString*) svgPathFromCGPath:(CGPathRef)aPath;
+(nullable CGPathRef) newCGPathFromSVGPath:(NSString*)anSVGPath whileApplyingTransform:(CGAffineTransform)aTransform;
您可以将这些字符串与 NSCoders 一起使用来存储东西。请注意,无论何时在路径和字符串之间进行转换,都可能会因为转换而丢失有效数字。
我编写了这些例程,它们在 MIT 许可下。
【讨论】: