Киборг является частичным портом Android VectordRawable для iOS. Он предназначен для замены для UIIMages, шрифтов и значков и опции Apple PDF -векторного изображения. VectordRawable Format предоставляет ряд преимуществ:
Cyborg также поддерживает MacOS (Appkit), TVOS и может использоваться в Swiftui. Тем не менее, имейте в виду, что эти реализации в настоящее время менее зрелые, чем версия iOS.
Мы сравнивали Киборг против ряда альтернатив, загружая 50+ значков, содержащихся в наборе значков нашего приложения нашего драйвера.
UIImage
. Различия должны быть в фракциях миллисекунд на практикеЕсли производительность анализа становится проблемой, вы можете реализовать либо механизм кэширования, подходящий для вашего приложения, или воспользоваться безопасностью потока Cyborg, чтобы выполнить анализ основного потока.
С учетом сказанного, в настоящее время существует многие возможности повышения производительности, поэтому производительность должна улучшиться в будущем. На момент написания этой статьи Swift является молодым языком, и улучшения производительности, особенно в создании струн, закрытии и владении, также должны оказывать положительное влияние на производительность Киборга.
Полный список функций перечислен в документации Android.
Киборг поддерживает Swift Manager и Carthage.
Чтобы установить с помощью Карфагена:
github "uber/cyborg" ~> [desired version]
Чтобы добавить киборг в проект XCode с использованием Swift Package Manager, следуйте инструкциям, предоставленным Apple.
После выполнения этапов интеграции ниже, использование киборга требует лишь немного больше кода, чем использование UIImage
:
let vectorView = VectorView ( theme : myTheme )
vectorView . drawable = VectorDrawable . named ( " MyDrawable " )
Киборг создан для масштабирования до сложных случаев использования случаев, и поэтому требуется немного конфигурации, чтобы получить образец чистого кода выше.
Посмотрим, как написать минимальную интеграцию, чтобы начать:
Одной из лучших особенностей VectordRawables является возможность обменять произвольные значения во время выполнения. Хорошо написанные вегеративные активы могут изменить свои цвета в ответ на изменения в состоянии приложения, такие как ночной режим.
Тем не менее, получение доступа к этим мощным функциям требует от нас писать наши собственные темы и поставщики ресурсов:
class Theme : Cyborg . ThemeProviding {
func colorFromTheme ( named _ : String ) -> UIColor {
return . black
}
}
class Resources : ResourceProviding {
func colorFromResources ( named _ : String ) -> UIColor {
return . black
}
}
Предполагая, что ресурсы никогда не меняются, теперь мы можем написать удобный инициализатор, изображенный в первом примере кода:
fileprivate let resources = Resources ( )
extension VectorDrawable {
public convenience init ( theme : Theme ) {
self . init ( theme : theme , resources : resources ( )
}
}
Если по какой -то причине вы предоставите недействительный векордром, доступный для киборга, стандартная функция создания в киборге даст вам подробное сообщение об ошибке, о котором вы можете сообщить в качестве нерадостного службы отчетности о сбоях по вашему выбору и использовать для отладки локально. Это может быть обработано на уровне «платформы» вашего приложения, что позволяет вам писать код, который предполагает, что анализ всегда преуспевает, как с 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
}
}
}
Как вы уже заметили, тема и ресурсные объекты, которые вы написали в более раннем разделе, устанули. Чтобы предотвратить проблемы с активами, которые ссылаются на несуществующую тему или цветы ресурсов, вы можете закинуть файлы XML, чтобы убедиться, что они действительны.
Вам может быть удобно позволить дизайнерам совершать новые активы непосредственно в репо, которое можно втянуть в ваши репозиторы Android и iOS дизайнерами.
Самый простой способ обеспечить правильность ваших пользовательских интерфейсов, которые используют статические векторы, - это снимки, чтобы проверить пользовательские интерфейсы, которые используют их с помощью инструмента, такого как iossnapshottestcase. Это гарантирует, что любой код, который не является проверенным компиляторами, соответствует вашим ожиданиям.