Проверьте эту библиотеку Snowflake, она отображает SVG как UIView.
Все пути в файле SVG будут отображаться как один CALayer, и к ним можно будет получить доступ позже в UIView().layer.sublayers
.
И цвета могут быть применены к соответствующему слою, соответствующему порядку индексов, указанному в исходном коде SVG.
func load() {
guard let path = Bundle.main.path(forResource: "fileName", ofType: "svg"),
let data = try? Data(contentsOf: URL(fileURLWithPath: path)),
let document = Document(data: data)
else { return }
// load SVG to a UIView
svgView = document.svg.view(size: CGSize(width: 300, height: 300))
// change path color
(svgView.layer.sublayers as? [CAShapeLayer])?.enumerated().forEach { index, layer in
layer.fillColor = index % 2 == 0 ? UIColor.green.cgColor : UIColor.red.cgColor
}
self.view.addSubview(svgView)
}
Например,
В примере проекта репозитория есть изображение с именем "shape_pencils.svg" с предустановленным цветом, показанным слева.
Затем его можно изменить на правильный с помощью следующего кода.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
(svgView.layer.sublayers as? [CAShapeLayer])?.enumerated().forEach { index, layer in
layer.fillColor = index % 2 == 0 ? UIColor.green.cgColor : UIColor.red.cgColor
}
}
Вот как это работает. Для каждого файла SVG, если вы откроете его в текстовом редакторе, вы увидите исходный код, подобный следующему снимку, показывающему «shape_pencils». Он содержит 19 путей и линий, каждая из которых будет отображаться как соответствующий CALayer.

Затем вы можете сопоставить стрелку и кружок с порядком индексов, найденным в исходном коде.

Другие популярные библиотеки также могут работать, поскольку они также используют UIView и его CALayer
Возможно, попробуйте символы SF в iOS 15: coderhelper.com/a/68697066/14351818
Спасибо, я смотрел WWDC 21 относительно SFSymbols, но, насколько я понял, вы можете создать значок SVG, содержащий 2 цвета, но вы не можете изменить его цвета во время выполнения. Когда вы закрываете цвета, они устанавливаются. Или, по крайней мере, я не понял, как их изменить из кода. Также многоцветные символы поддерживаются только в iOS 15 :(
Вы можете изменить его во время выполнения! Я показал, как в моем ответе. Но да, это iOS 15+...
Вы уже задавали тот же вопрос несколько дней назад, не так ли? Что мешает вам отредактировать исходный вопрос?
Я отредактировал вопрос, но он остался закрытым, поэтому никто не смог на него ответить. Поэтому я удалил старый и открыл новый.