Pasar de la letra "P" a una secuencia de puntos implica varios pasos. Tendrá que usar Core Text.
Crear un CTFont
. Desde iOS 7, puede usar un UIFont
donde se necesita CTFont
(son "sin cargo puenteado"). También puede crear un CTFont
directamente desde CGFont
usando la función CTFontCreateWithGraphicsFont
, o por nombre usando CTFontCreateWithName
(o usando algunos otros métodos).
Obtener los glifos de la letra usando la función CTFontGetGlyphsForCharacters
. Para la letra "P" debería haber solo un glifo. Para algunos caracteres en scripts que no están en inglés, puede obtener múltiples glifos (combinados).
Utilice la función CTFontCreatePathForGlyph
para obtener un CGPath
para el glifo.
Uso CGPathApply
para enumerar los elementos de la ruta.
Convierta cada línea, curva cuádruple y elemento de curva cúbica de la ruta en una secuencia de puntos. Apple no proporciona ninguna API pública para hacer esto. Tendrás que hacerlo tú mismo. Para los elementos de línea recta es fácil. Para los elementos de curva, tendrá que investigar un poco si aún no sabe cómo renderizar una curva de Bézier. Por ejemplo, vea convert bezier curve to polygonal chain?.
Podemos experimentar con esto fácilmente en un parque infantil Swift:
import UIKit
import CoreText
import XCPlayground
let font = UIFont(name: "HelveticaNeue", size: 64)!
var unichars = [UniChar]("P".utf16)
var glyphs = [CGGlyph](count: unichars.count, repeatedValue: 0)
let gotGlyphs = CTFontGetGlyphsForCharacters(font, &unichars, &glyphs, unichars.count)
if gotGlyphs {
let cgpath = CTFontCreatePathForGlyph(font, glyphs[0], nil)!
let path = UIBezierPath(CGPath: cgpath)
print(path)
XCPlaygroundPage.currentPage.captureValue(path, withIdentifier: "glyph \(glyphs[0])")
}
Resultado:
<UIBezierPath: 0x7fbc89e0d370; <MoveTo {11.072000000000001, 23.808}>,
<LineTo {11.072000000000001, 40.576000000000001}>,
<LineTo {22.975999999999999, 40.576000000000001}>,
<QuadCurveTo {30.560000000000002, 38.432000000000002} - {28.16, 40.576000000000001}>,
<QuadCurveTo {32.960000000000001, 32.192} - {32.960000000000001, 36.288000000000004}>,
<QuadCurveTo {30.560000000000002, 25.920000000000002} - {32.960000000000001, 28.096}>,
<QuadCurveTo {22.975999999999999, 23.808} - {28.16, 23.744}>,
<Close>,
<MoveTo {4.992, 45.695999999999998}>,
<LineTo {4.992, 0}>,
<LineTo {11.072000000000001, 0}>,
<LineTo {11.072000000000001, 18.687999999999999}>,
<LineTo {25.024000000000001, 18.687999999999999}>,
<QuadCurveTo {35.488, 22.208000000000002} - {31.936, 18.623999999999999}>,
<QuadCurveTo {39.039999999999999, 32.192} - {39.039999999999999, 25.792000000000002}>,
<QuadCurveTo {35.488, 42.143999999999998} - {39.039999999999999, 38.591999999999999}>,
<QuadCurveTo {25.024000000000001, 45.695999999999998} - {31.936, 45.695999999999998}>,
<Close>
[¿Qué has probado?] (Http://whathaveyoutried.com) – EmilioPelaez