Ответ 1
Хорошо, если вы готовы заплатить за это. Этот инструмент решит все ваши проблемы. Вы можете импортировать svg или psd и выдать код для вас. Я использовал его, и это потрясающе!
Я пытаюсь импортировать пути из векторной программы рисования в среду ios. Я хотел бы получить их в CGpaths или UIbezierpaths. Меня больше всего интересует импорт путей из Adobe Illustrator. Лучший способ, похоже, сохранить как svg, а затем импортировать.
Я нашел несколько ресурсов для синтаксического анализа экспортированных SVG файлов, описывающих пути. Однако все, что я нашел, касается только абсолютных путей, а не относительных путей. Путь ниже имеет капитал C и нижний регистр C. Я знаю, как анализировать капитал C (абсолютные пути), но я понятия не имею, как разбирать строчные c (относительные пути)
Я ищу помощь в написании парсера для импорта svg файлов в ios/ cocoa. Я думаю, что существует большая потребность в этом, судя по поиску Интернета в течение нескольких недель.
Вот пример пути, который я хотел бы импортировать в свое приложение iphone. Я не хочу импортировать изображение, я хочу сам путь. Поэтому я могу манипулировать им. Любая помощь будет высоко оценена.
x="0px" y="0px" width="320px" height="436px" viewBox="-1.4 -0.5 320 436"
d="M294.1,116C290.6,1.4,170.9,0.4,159.6,0.5
C148.3,0.4,28.7,1.4,25.2,116c-3.7,120.3-49.6,141.4-5.9,233.9c41.3,87.4,130.7,87,140.4,86.7c9.7,0.3,99.1,0.8,140.4-86.7
C343.7,257.4,297.8,236.3,294.1,116z
Если бы это были все абсолютные пути, я мог бы решить это сейчас. Это относительные (т.е. Пути с низкой степенью (c)), которые меня действительно путают.
Хорошо, если вы готовы заплатить за это. Этот инструмент решит все ваши проблемы. Вы можете импортировать svg или psd и выдать код для вас. Я использовал его, и это потрясающе!
Там есть библиотека SVG с открытым исходным кодом в ObjectiveC, особенно для iOS (и OS X, хотя сборка OS X немного отстает):
https://github.com/SVGKit/SVGKit/
(Я использовал это в проектах iOS с начала этого года, он хорошо работает)
По состоянию на начало 2012 года это не 100% -ная реализация спецификации SVG, но там много людей, которые работают над ее получением.
Если вы хотите сделать перевод с JS на ObjC, вы можете найти этот проект полезным:
https://github.com/thelonious/svg-2d
В частности, файл path.js, который включает в себя метод parseData, заботясь об относительных и абсолютных командах пути.
https://github.com/thelonious/svg-2d/blob/master/shapes/path/Path.js
Я должен упомянуть, что я написал этот код несколько лет назад, но я перевел его на Java и С# и использовал в профессиональных продуктах (к сожалению, не могу поделиться этим кодом), и он, похоже, хорошо работает в этих средах.
НТН Кевин
Sketch 3 в Mac App Store хорош в редактировании (может быть лучше, чем PaintCode), а затем экспортировать как SVG в PaintCode.
Чтобы получить из PaintCode обратно в Sketch save как PDF и импортировать ok
https://itunes.apple.com/gb/app/sketch-3/id852320343?mt=12
Убедитесь, что размер холста в обоих случаях одинаковый, а в ваших ограничениях просмотров еще нужно масштабировать контекст.
SVGgh содержит класс SVGPathGenerator, который преобразует SVG-путь в CGPathRef:
+(CGPathRef) newCGPathFromSVGPath:(NSString*)anSVGPath whileApplyingTransform:(CGAffineTransform)aTransform;
Вы можете использовать его для выполнения именно того, что вы запрашиваете.
[Обновление Swift 3] Если вы хотите получить чистое решение Swift. Моя (в процессе) Scalar2D библиотека имеет расширение на CGPath, которое создает CGPath из пути SVG.
Oneliner, который добавляет SVG в NSView:
addSubView(SVGParser.svg(FileParser.xml(~/Desktop/test.svg)))
SVGLib для быстрого: https://github.com/eonist/swift-utils
Это решение представляет собой прямое преобразование строки пути SVG в UIBezierPath. Он отлично подойдет для моего приложения, где мне нужно было объединить США в UIView.