Ich animiere ein SVG-Bild in iOS mit Swift. Ich konnte das SVG leicht mit SVGKit (https://github.com/SVGKit/SVGKit) rendern, aber um es zu animieren, muss ich das SVG-Pfadelement in UIBezierPath konvertieren. Ich kann dies mit anderen Bibliotheken tun, aber es wäre schön, wenn ich all das mit SVGKit allein machen könnte. Ich habe keinen direkten Weg gefunden, um das Pfadelement zu erhalten.Wie SVG-Pfad-Komponente zu UIBezierPath mit SVGKit in iOS analysieren?
3
A
Antwort
1
Der Pfad ist durch Aufrufen von .path in Apples Klassen verfügbar. Ich schlage vor, Sie lesen die Apple CoreAnimation-Dokumentation, insbesondere CAShapeLayer (das von SVGKit stark verwendet wird).
Apple bietet auch Code für die Konvertierung in UIBezierPath - suchen Sie erneut in der Apple-Dokumentation nach Details dazu. Beispiel:
- (UIBezierPath *) bezierPathWithCGPath: (CGPathRef) CGPath;
1
Ich hatte die gleichen Probleme mit Swift und mit SVGKit. Auch nachdem ich diesem simple tutorial gefolgt bin und es in swift umwandelte, konnte ich das SVG aber die Zeichnungslinie nicht animieren. Was für mich gearbeitet wurde PocketSVG Schalt
Sie haben eine Funktion über jede Schicht zu durchlaufen, und das ist, wie ich es verwendet, um eine SVG-Datei zu animieren:
let url = NSBundle.mainBundle().URLForResource("tiger", withExtension: "svg")!
let paths = SVGBezierPath.pathsFromSVGAtURL(url)
for path in paths {
// Create a layer for each path
let layer = CAShapeLayer()
layer.path = path.CGPath
// Default Settings
var strokeWidth = CGFloat(4.0)
var strokeColor = UIColor.blackColor().CGColor
var fillColor = UIColor.whiteColor().CGColor
// Inspect the SVG Path Attributes
print("path.svgAttributes = \(path.svgAttributes)")
if let strokeValue = path.svgAttributes["stroke-width"] {
if let strokeN = NSNumberFormatter().numberFromString(strokeValue as! String) {
strokeWidth = CGFloat(strokeN)
}
}
if let strokeValue = path.svgAttributes["stroke"] {
strokeColor = strokeValue as! CGColor
}
if let fillColorVal = path.svgAttributes["fill"] {
fillColor = fillColorVal as! CGColor
}
// Set its display properties
layer.lineWidth = strokeWidth
layer.strokeColor = strokeColor
layer.fillColor = fillColor
// Add it to the layer hierarchy
self.view.layer.addSublayer(layer)
// Simple Animation
let animation = CABasicAnimation(keyPath:"strokeEnd")
animation.duration = 4.0
animation.fromValue = 0.0
animation.toValue = 1.0
animation.fillMode = kCAFillModeForwards
animation.removedOnCompletion = false
layer.addAnimation(animation, forKey: "strokeEndAnimation")
Verwandte Themen
- 1. iOS: Inverse UIBezierPath (bezierPathWithOvalInRect)
- 2. Wie bekomme ich UIBezierpath mit Glyph in iOS SDK
- 3. iOS - Clipping Union von zwei Pfaden mit UIBezierPath appendPath
- 4. wie komplexe JSON-Daten in iOS zu analysieren?
- 5. Wie zu lesen oder zu analysieren .mobi Datei auf iOS
- 6. UIBezierPath Persistenz mit Kerndaten
- 7. UIBezierPath mit Farbverlauf
- 8. Wie kann ich dieses XML mit NSXMLParser in iOS analysieren?
- 9. iOS - Hosting-JSON-Datei, um es mit URL zu analysieren
- 10. UIBezierPath in Swift archivieren
- 11. Mehrere UIView-Animation mit UIBezierPath
- 12. Warum benötigt UIBezierPath-Zeichnen auf iOS keinen Kontext?
- 13. Wie zu analysieren BaseHTTPRequestHandler.path
- 14. UIBezierPath um UIImage mit Transparenz
- 15. Wie JsonArray zu analysieren?
- 16. Wie String Array mit SwiftyJSON zu analysieren?
- 17. Wie HTML-Datei mit Clojure zu analysieren?
- 18. Wie XML mit VB zu analysieren. NET
- 19. Wie falsch JSON mit Python zu analysieren?
- 20. Wie zu analysieren Byte mit Bits Wert
- 21. Wie zu analysieren String mit '+' Symbol
- 22. Wie fülle ich Farbe in UIBezierPath?
- 23. Anfangs- und Endwinkel von UIBezierPath?
- 24. Wie zu analysieren Datum String mit Gebietsschema
- 25. Wie XML mit JAXB zu analysieren?
- 26. Wie XML mit jsoup zu analysieren
- 27. Ausdruck analysieren: wie zu tokenisieren
- 28. Wie fehlerhafte HTML in Python zu analysieren
- 29. Array-Liste in XPages wie zu analysieren
- 30. Wie "zufällige" XML zu analysieren
Die Frage ist nicht über UiBezierPath zu CGPath Umwandlung oder und umgekehrt. Es geht eher um svg-> UiBezierPath – alexburtnik
OP verwendet SVGKit. SVGKit speichert * alles * als CGPath zum Rendern. SVGKit macht * alles * über die APIs von Apple verfügbar, wie ich oben beschrieben habe. Bitte lesen Sie genauer: Hier geht es um die Konvertierung zwischen UIBezierPath und CGPath! – Adam
Ich habe ein Popup mit der Aussage, dass jemand diese Antwort abgelehnt hat. Kein Kommentar, nur Downvote. Nicht hilfreich (besonders da der Downvoter falsch ist :)) – Adam