【问题标题】:How to translate a set of points in a UIBezierPath or CGPath in Swift for iOS?如何在 iOS 的 Swift 中翻译 UIBezierPath 或 CGPath 中的一组点?
【发布时间】:2016-09-20 01:47:23
【问题描述】:

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

我该如何解决这个问题?有没有更好的方法来实现这一点?

谢谢。

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

【问题讨论】:

    标签: ios swift core-graphics uibezierpath cgpath


    【解决方案1】:

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

    【讨论】:

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