如何将 Swift 中的 UIBezierPath 或 CGPath 中的一组点转换为 iOS?
How to translate a set of points in a UIBezierPath or CGPath in Swift for iOS?
我使用 CoreText CTFontCreatePathForGlyph
从字形创建了 CGPath。感谢 this SO post,我还可以访问我的 CGPath 中的所有 CGPoint 作为数组,我可以 .filter()
和 .map()
满足我的需要(我试图翻译与职位标准)。另一方面,我无法将所述数组转换回 CGPath,我需要这样做才能以图形方式呈现更改。
我该如何解决这个问题?有没有更好的方法来实现这一点?
谢谢。
PS:因为我最终会将所说的 CGPaths 转换为 UIBezierPaths,如果适用,请随意使用 UIBezierMethod。
我想出了一个解决方案,因为似乎没有更好的方法(根据我的研究):反转 CGPath to CGPoint function。这是一个概念证明:
let newPath = UIBezierPath()
myPath.forEach(body: { element -> Void in
let point = element.points.pointee
switch element.type {
case .moveToPoint:
newPath.move(to: point)
case .addLineToPoint:
newPath.addLine(to: point)
case .addQuadCurveToPoint:
newPath.addQuadCurve(to: point, controlPoint: point)
case .addCurveToPoint:
newPath.addCurve(to: point, controlPoint1: point, controlPoint2: point)
case .closeSubpath:
newPath.close()
}
})
我目前使用的字形集没有曲线(8 位),所以目前,这就可以了。在带有曲线的字形集上尝试时,最终路径有点尖角(FIXME:创建曲线点解析算法)
我使用 CoreText CTFontCreatePathForGlyph
从字形创建了 CGPath。感谢 this SO post,我还可以访问我的 CGPath 中的所有 CGPoint 作为数组,我可以 .filter()
和 .map()
满足我的需要(我试图翻译与职位标准)。另一方面,我无法将所述数组转换回 CGPath,我需要这样做才能以图形方式呈现更改。
我该如何解决这个问题?有没有更好的方法来实现这一点?
谢谢。
PS:因为我最终会将所说的 CGPaths 转换为 UIBezierPaths,如果适用,请随意使用 UIBezierMethod。
我想出了一个解决方案,因为似乎没有更好的方法(根据我的研究):反转 CGPath to CGPoint function。这是一个概念证明:
let newPath = UIBezierPath()
myPath.forEach(body: { element -> Void in
let point = element.points.pointee
switch element.type {
case .moveToPoint:
newPath.move(to: point)
case .addLineToPoint:
newPath.addLine(to: point)
case .addQuadCurveToPoint:
newPath.addQuadCurve(to: point, controlPoint: point)
case .addCurveToPoint:
newPath.addCurve(to: point, controlPoint1: point, controlPoint2: point)
case .closeSubpath:
newPath.close()
}
})
我目前使用的字形集没有曲线(8 位),所以目前,这就可以了。在带有曲线的字形集上尝试时,最终路径有点尖角(FIXME:创建曲线点解析算法)