2016-09-20 1 views
1

J'ai créé un CGPath à partir d'un glyphe en utilisant le CTFontCreatePathForGlyph de CoreText. Merci à this SO post, j'ai également accès à tous les CGPoint dans mon CGPath sous forme de tableau, que je peux .filter() et .map() à mes besoins (je cherche à traduire certains points qui correspondent à un critère de position). D'un autre côté, je suis incapable de convertir ledit tableau en CGPath, ce que je dois faire pour rendre graphiquement les changements.Comment traduire un ensemble de points dans un UIBezierPath ou un CGPath dans Swift pour iOS?

Comment puis-je résoudre ce problème? Y a-t-il un meilleur moyen d'y parvenir?

Merci. PS: Parce que je vais éventuellement convertir ces CGPaths en UIBezierPaths, n'hésitez pas à utiliser un UIBezierMethod s'il y a lieu.

Répondre

1

Je suis venu avec une solution, car il semble qu'il n'y a pas de meilleur moyen (d'après ce que j'ai recherché): Inverser le CGPath to CGPoint function. Voici une preuve de concept:

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() 
    } 
}) 

L'ensemble glyphe Je travaille actuellement avec des courbes n'a pas (8 bits), donc pour le moment, cela va faire. Lorsqu'il est essayé sur un jeu de glyphes avec des courbes, le dernier chemin est légèrement aigu (FIXME: Créer un algorithme d'analyse de point de courbe)