Cyborg是Android iOS可进行的部分港口。它旨在替代UIIMAGE,图标字体和Apple的PDF矢量图像选项。 VectorDrawable格式提供了许多优势:
Cyborg还支持MacOS(AppKit),TVOS,可以从Swiftui使用。但是,请注意,这些实现目前不如iOS版本成熟。
我们将半机械人基于许多替代方案进行了基准,并加载了驱动程序应用程序图标集中包含的50多个图标。
UIImage
慢一点。在实践中,差异应该在毫秒的分数中如果解析性能成为问题,您可能希望实现适合您应用程序的缓存机制,或者利用Cyborg的线程安全性执行主线程。
话虽如此,目前存在许多绩效改进机会,因此绩效将来应该有所改善。截至撰写本文时,Swift是一种年轻的语言,并且对其表现进行了改进,尤其是在弦乐创建,关闭和所有权方面,也应该对Cyborg的性能产生积极影响。
Android文档中列举了功能的完整列表。
Cyborg支持Swift Package Manager和Carthage。
使用迦太基安装:
github "uber/cyborg" ~> [desired version]
要使用Swift软件包管理器将Cyborg添加到Xcode项目中,请按照Apple提供的说明进行操作。
在遵循以下集成步骤之后,使用机器人只需要比使用UIImage
稍多的代码:
let vectorView = VectorView ( theme : myTheme )
vectorView . drawable = VectorDrawable . named ( " MyDrawable " )
机器人是为了扩展到复杂用途的情况,因此需要一些配置才能在上面获取清洁代码样本。
让我们看看如何编写最小整合以开始:
VectordRawables的最佳功能之一是能够在运行时交换任意值。著名的VectorDrawable Assets可以根据应用程序状态(例如夜间模式)的变化来改变其颜色。
但是,获得这些强大功能的访问需要我们编写自己的主题和资源提供者:
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 ( )
}
}
如果出于某种原因,您为Cyborg提供了无效的VectordRawid,则Cyborg中的标准创建功能将为您提供详细的错误消息,您可以作为您选择的崩溃报告服务的非致命报告,并用于本地调试。可以在应用程序的“平台”级别上处理这一点,使您可以编写假设解析始终成功的代码,就像使用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存储库中的存储库很方便。
确保使用静态矢量绘制的UI的最简单方法是快照使用iossnapshottestcase的工具来测试使用它们的UI。这将确保任何未经编译器验证的代码都可以符合您的期望。