Преобразование текста в CGPATH в SVG | Проблема с преобразованием пути SVG из CGPATH в iOS: круговой путь вместо текстаIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Преобразование текста в CGPATH в SVG | Проблема с преобразованием пути SVG из CGPATH в iOS: круговой путь вместо текста

Сообщение Anonymous »

Я пытаюсь преобразовать текст в путь, используя CGPATH в iOS, а затем преобразовать этот путь в строку SVG, но когда я сохраняю SVG и загружаю его снова, путь является круглым, а не формирует правильную форму текста.
Вот моя реализация:
Функция TextTopath:

Код: Выделить всё

func textToPath(text: String, font: UIFont) -> CGPath? {
let attributedString = NSAttributedString(string: text, attributes: [.font: font])
let line = CTLineCreateWithAttributedString(attributedString)
let runArray = CTLineGetGlyphRuns(line) as NSArray

let path = CGMutablePath()

for run in runArray {
let run = run as! CTRun
let count = CTRunGetGlyphCount(run)

for index in 0.. String {
let boundingBox = path.boundingBox
let svgWidth = boundingBox.width
let svgHeight = boundingBox.height

var svgString = "\n"
svgString += "
path.applyWithBlock { elementPointer in
let element = elementPointer.pointee
let points = element.points

switch element.type {
case .moveToPoint:
svgString += "M \(points.pointee.x) \(points.pointee.y) "
case .addLineToPoint:
svgString += "L \(points.pointee.x) \(points.pointee.y) "
case .addQuadCurveToPoint:
svgString += "Q \(points.pointee.x) \(points.pointee.y) \(points.pointee.x) \(points.pointee.y) "
case .addCurveToPoint:
svgString += "C \(points.pointee.x) \(points.pointee.y) \(points.pointee.x) \(points.pointee.y) \(points.pointee.x) \(points.pointee.y) "
case .closeSubpath:
svgString += "Z "
@unknown default:
break
}
}

svgString += "\" fill=\"\(color.hexString)\" />\n"
svgString += ""

return svgString
}

< /code>
[b] Проблема: < /strong>
Когда я загружаю сохраненный файл SVG, он создает круглый путь вместо правильной формы текста. Я полагаю, что преобразование пути не захватывает правильные координаты или кривые, поскольку оно не отображается должным образом в зрителе SVG. < /P>
 Дополнительные детали: < /strong>
Функция TextTopath генерирует CGPATH, основанный на тексту и его шрифте.
Функция PathToSVG ​​должна преобразовать CGPATH в строку пути SVG.
Сохраняемый файл SVG отображает круглый путь, а не на предполагаемом Текст.
 Что я пробовал: [/b] 
Я проверил преобразование, применяемое к пути, и это Кажется правильным для инвертирования оси Y.
Я попытался использовать как M, так и L для команд Path, но SVG все еще не делает текст, как и ожидалось.
Любая помощь будет высоко оценена. Заранее спасибо! 
  

Подробнее здесь: [url]https://stackoverflow.com/questions/79395763/converting-text-to-cgpath-to-svg-problem-with-svg-path-conversion-from-cgpath[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»