Cyborg ist ein teilweise Hafen von Androids Vektorderschaft für iOS. Es ist als Ersatz für UIImages, Icon -Schriftarten und die PDF -Vektor -Bildoption von Apple gedacht. Das vektordrawable Format bietet eine Reihe von Vorteilen:
Cyborg unterstützt auch MacOS (Appkit), TVOS und kann von Swiftui verwendet werden. Beachten Sie jedoch, dass diese Implementierungen derzeit weniger reif sind als die iOS -Version.
Wir haben Cyborg an eine Reihe von Alternativen untersucht und die über 50 -jährigen Symbole geladen, die im Symbol unserer Fahrer -App enthalten sind.
UIImage
. Die Unterschiede sollten in den Fraktionen von Millisekunden in der Praxis liegenWenn die Parsenleistung zu einem Problem wird, möchten Sie möglicherweise entweder einen Caching -Mechanismus implementieren, der für Ihre Anwendung geeignet ist, oder die Sicherheit von Cyborg nutzen, um das Parsen des Hauptfadens durchzuführen.
Trotzdem gibt es derzeit viele Möglichkeiten zur Leistungsverbesserung, sodass sich die Leistung in Zukunft verbessern sollte. Zum jetzigen Zeitpunkt ist Swift eine junge Sprache, und die Leistungsverbesserungen, insbesondere bei der Erstellung von String, Schließungen und Besitzer sollten sich auch positiv auf die Leistung von Cyborg auswirken.
Die vollständige Liste der Funktionen wird in der Android -Dokumentation aufgezählt.
Cyborg unterstützt Swift Package Manager und Karthago.
Mit Karthago zu installieren:
github "uber/cyborg" ~> [desired version]
Um Cyborg zu einem Xcode -Projekt mit Swift Paket Manager hinzuzufügen, befolgen Sie die von Apple bereitgestellten Anweisungen.
Nach der folgenden Integrationsschritten erfordert die Verwendung von Cyborg nur geringfügig mehr Code als die Verwendung eines UIImage
:
let vectorView = VectorView ( theme : myTheme )
vectorView . drawable = VectorDrawable . named ( " MyDrawable " )
Cyborg wird hergestellt, um auf komplexe Verwendungsfälle zu skalieren, und erfordern daher ein bisschen Konfiguration, um die oben genannte Clean -Code -Probe zu erhalten.
Lassen Sie uns sehen, wie Sie die minimale Integration schreiben, um loszulegen:
Eine der besten Funktionen von VectorDrawables ist die Fähigkeit, zur Laufzeit willkürliche Werte auszutauschen. Gut verfasste Vectordrawable -Assets können ihre Farben als Reaktion auf Änderungen im App -Status wie einen Nachtmodus ändern.
Wenn wir jedoch Zugriff auf diese leistungsstarken Funktionen erhalten, müssen wir unser eigenes Thema und unsere Ressourcenanbieter schreiben:
class Theme : Cyborg . ThemeProviding {
func colorFromTheme ( named _ : String ) -> UIColor {
return . black
}
}
class Resources : ResourceProviding {
func colorFromResources ( named _ : String ) -> UIColor {
return . black
}
}
Unter der Annahme, dass sich Ressourcen nie ändern, können wir jetzt den im ersten Code -Beispiel dargestellten Convenience -Initialisierer schreiben:
fileprivate let resources = Resources ( )
extension VectorDrawable {
public convenience init ( theme : Theme ) {
self . init ( theme : theme , resources : resources ( )
}
}
Wenn Sie aus irgendeinem Grund Cyborg eine ungültige Vektorderschaft anbieten, gibt Ihnen die Standard -Erstellungsfunktion in Cyborg eine detaillierte Fehlermeldung, die Sie als nicht tödlich für den Crash -Berichtsdienst Ihrer Wahl melden und lokal debuggen können. Dies kann auf der "Plattform" Ihrer App gehandhabt werden, sodass Sie Code schreiben können, der davon ausgeht, dass das Parsen immer erfolgreich ist, genau wie bei UIImage:
extension VectorDrawable {
public static func named ( _ name : String ) -> VectorDrawable ? {
return Bundle . main . url ( forResource : name , withExtension : " xml " ) . flatMap { url in
switch VectorDrawable . create ( from : url ) {
case . ok ( let drawable ) :
return drawable
case . error ( let error ) :
myAssertionFailureThatAlsoReportsToBackend ( " Could not create a vectordrawable named ( name ) ; the error was ( error ) " )
return nil
}
}
}
Wie Sie vielleicht bereits bemerkt haben, werden das Thema und die Ressourcenobjekte, die Sie in einem früheren Abschnitt geschrieben haben, tippt. Um Probleme mit Vermögenswerten zu verhindern, die auf nicht vorhandene Themen oder Ressourcenfarben verweisen, möchten Sie möglicherweise die XML -Dateien enthält, um sicherzustellen, dass sie gültig sind.
Möglicherweise finden Sie es bequem, Desigern es zu ermöglichen, neue Vermögenswerte direkt an ein Repo zu verpflichten, das von Designer in Ihre Android- und iOS -Repos eingezogen werden kann.
Der einfachste Weg, um die Korrektheit Ihrer Benutzeroberfläche zu gewährleisten, die statische Vektor -Zeichnungen verwenden, besteht darin, die Benutzeroberfläche zu prüfen, die sie verwenden, die ein Werkzeug wie Iossnapshottestcase verwenden. Dadurch wird sichergestellt, dass jeder Code, der nicht mit Compiler-verifiziert ist, Ihren Erwartungen entspricht.