В моем приложении ios swift у меня есть файл SVG
- это форма маркера карты, теперь я хочу нарисовать его с помощью анимации. Мне удалось отобразить рисунок благодаря использованию pocketSVG
https://github.com/pocketsvg/PocketSVG/ Мой код выглядит следующим образом:Как я могу анимировать рисунок svg path в моем быстром приложении?
@IBOutlet weak var mainLogoView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let url = Bundle.main.url(forResource: "mainLogo", withExtension: "svg")!
//initialise a view that parses and renders an SVG file in the bundle:
let svgImageView = SVGImageView.init(contentsOf: url)
//scale the resulting image to fit the frame of the view, but
//maintain its aspect ratio:
svgImageView.contentMode = .scaleAspectFit
//layout the view:
svgImageView.translatesAutoresizingMaskIntoConstraints = false
mainLogoView.addSubview(svgImageView)
svgImageView.topAnchor.constraint(equalTo: mainLogoView.topAnchor).isActive = true
svgImageView.leftAnchor.constraint(equalTo: mainLogoView.leftAnchor).isActive = true
svgImageView.rightAnchor.constraint(equalTo: mainLogoView.rightAnchor).isActive = true
svgImageView.bottomAnchor.constraint(equalTo: mainLogoView.bottomAnchor).isActive = true
Timer.scheduledTimer(timeInterval: TimeInterval(2), target: self, selector: "functionHere", userInfo: nil, repeats: false)
}
func functionHere(){
self.performSegue(withIdentifier: "MainSegue", sender: nil)
}
Так в основном в моем ViewController я добавил на раскадровке в view
называется mainLogoView
, а затем я отображая там файл SVG. Теперь, поскольку это формальный маркер, очень похожий на это: http://image.flaticon.com/icons/svg/116/116395.svg Я хочу нарисовать его - в течение 2 секунд я хочу нарисовать форму вокруг круга.
Как я могу это сделать?
===== EDIT:
Следуя совету I Джоша закомментирована большую часть кода в моем viewDidLoad
и сделал вместо этого:
let url = Bundle.main.url(forResource: "mainLogo", withExtension: "svg")!
for path in SVGBezierPath.pathsFromSVG(at: url)
{
var layer:CAShapeLayer = CAShapeLayer()
layer.path = path.cgPath
layer.lineWidth = 4
layer.strokeColor = orangeColor.cgColor
layer.fillColor = UIColor.white.cgColor
mainLogoView.addSubview(layer)
}
но теперь последняя строка выдает ошибку
Cannot convert value of type 'CAShapeLayer' to expected argument type 'UIView'
Кроме того, после редактирования моего кода - не могли бы вы дать мне подсказку, как я могу использовать метод Джоша здесь?
слой не является UIView, но UIView имеет свойство слоя. Вам нужно добавить layerLayer к слою в качестве подуровня. mainLogoView.layer.addSublayer (слой). Также анимация не будет правильной, если у вас есть несколько путей (вы можете сделать это, если вы их соедините). Цель состоит в том, что у вас есть один путь, и все точки этого пути находятся в правильном порядке. –
Спасибо, мне удалось нарисовать его в конце концов :) Я сделал это с помощью: 'для пути в SVGBezierPath.pathsFromSVG (at: url) {var layer: CAShapeLayer = CAShapeLayer() layer.frame = self.mainLogoView.layer.bounds' однако Кажется, что настройка границ не сработала - изображение получило огромное удовольствие. Как я могу поместить его в 'mainLogoView'? – user3766930
Я добавляю его в представление с помощью 'mainLogoView.layer.insertSublayer (layer, at: 0)' – user3766930