如何在Swift for iOS中翻译UIBezierPath或CGPath中的一组点?

时间:2016-09-20 01:47:24

标签: ios swift core-graphics uibezierpath cgpath

我使用CoreText' s CTFontCreatePathForGlyph从字形创建了一个CGPath。感谢this SO post,我也可以访问我的CGPath中的所有CGPoint作为数组,我可以.filter().map()满足我的需求(我试图翻译某些匹配a的点)职位标准)。另一方面,我无法将所述数组转换回CGPath,我需要这样做才能以图形方式呈现更改。

我怎么能解决这个问题?有没有更好的方法来实现这一目标?

谢谢。

PS:因为我最终要将所述CGPath转换为UIBezierPaths,所以如果适用,请随意使用UIBezierMethod。

1 个答案:

答案 0 :(得分:3)

我想出了一个解决方案,因为似乎没有更好的方法(从我研究过的方法):反转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:创建曲线点解析算法)