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。這將確保任何未經編譯器驗證的代碼都可以符合您的期望。