Cyborg adalah port parsial vectordrawable ke iOS. Ini dimaksudkan sebagai pengganti UIImages, Icon Fonts, dan opsi gambar Vektor PDF Apple. Format vecordrawable memberikan sejumlah keuntungan:
Cyborg juga mendukung macOS (APPKIT), TVOS, dan dapat digunakan dari SwiftUi. Namun, ketahuilah bahwa implementasi ini saat ini kurang matang daripada versi iOS.
Kami membandingkan cyborg terhadap sejumlah alternatif, memuat 50+ ikon yang terkandung dalam set ikon aplikasi driver kami.
UIImage
. Perbedaannya harus dalam fraksi milidetik dalam praktiknyaJika kinerja parsing menjadi masalah, Anda mungkin ingin menerapkan mekanisme caching yang sesuai untuk aplikasi Anda, atau memanfaatkan keamanan utas Cyborg untuk melakukan penguraian dari utas utama.
Dengan itu, banyak peluang peningkatan kinerja saat ini ada, sehingga kinerja harus meningkat di masa depan. Pada tulisan ini, Swift adalah bahasa muda, dan peningkatan kinerja, terutama dalam penciptaan string, penutupan, dan kepemilikan juga harus memiliki dampak positif pada kinerja Cyborg.
Daftar lengkap fitur disebutkan dalam dokumentasi Android.
Cyborg mendukung Swift Package Manager dan Carthage.
Untuk menginstal menggunakan carthage:
github "uber/cyborg" ~> [desired version]
Untuk menambahkan cyborg ke proyek Xcode menggunakan Swift Package Manager, ikuti instruksi yang disediakan oleh Apple.
Setelah mengikuti langkah -langkah integrasi di bawah ini, menggunakan cyborg hanya membutuhkan sedikit lebih banyak kode daripada menggunakan UIImage
:
let vectorView = VectorView ( theme : myTheme )
vectorView . drawable = VectorDrawable . named ( " MyDrawable " )
Cyborg dibuat untuk meningkatkan ke kasus penggunaan yang kompleks, dan dengan demikian memerlukan sedikit konfigurasi untuk mendapatkan sampel kode bersih di atas.
Mari kita lihat bagaimana menulis integrasi minimal untuk memulai:
Salah satu fitur terbaik dari VectorDrawables adalah kemampuan untuk bertukar nilai sewenang -wenang saat runtime. Aset vecordrawable yang ditulis dengan baik dapat mengubah warnanya sebagai respons terhadap perubahan keadaan aplikasi, seperti mode malam.
Namun, mendapatkan akses ke fitur -fitur kuat ini mengharuskan kita untuk menulis tema dan penyedia sumber daya kita sendiri:
class Theme : Cyborg . ThemeProviding {
func colorFromTheme ( named _ : String ) -> UIColor {
return . black
}
}
class Resources : ResourceProviding {
func colorFromResources ( named _ : String ) -> UIColor {
return . black
}
}
Dengan asumsi bahwa sumber daya tidak pernah berubah, kita sekarang dapat menulis inisialisasi kenyamanan yang digambarkan dalam sampel kode pertama:
fileprivate let resources = Resources ( )
extension VectorDrawable {
public convenience init ( theme : Theme ) {
self . init ( theme : theme , resources : resources ( )
}
}
Jika, untuk beberapa alasan, Anda memberikan vectordrawable yang tidak valid ke Cyborg, fungsi pembuatan standar di Cyborg akan memberi Anda pesan kesalahan terperinci yang dapat Anda laporkan sebagai nonfatal terhadap layanan pelaporan kerusakan pilihan Anda dan digunakan untuk men -debug secara lokal. Ini dapat ditangani di level "platform" aplikasi Anda, memungkinkan Anda untuk menulis kode yang mengasumsikan bahwa parsing selalu berhasil, seperti halnya dengan 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
}
}
}
Seperti yang mungkin sudah Anda perhatikan, objek tema dan sumber daya yang Anda tulis di bagian sebelumnya diketik. Untuk mencegah masalah dengan aset yang merujuk pada tema atau warna sumber daya yang tidak ada, Anda mungkin ingin memasukkan file XML untuk memastikan bahwa mereka valid.
Anda mungkin merasa nyaman untuk memungkinkan desainer melakukan aset baru secara langsung ke repo yang dapat ditarik ke repo Android dan iOS Anda oleh desainer.
Cara termudah untuk memastikan kebenaran UI Anda yang menggunakan statis vector drawable adalah dengan menguji UI yang menggunakannya menggunakan alat seperti iossnapshottestcase. Ini akan memastikan bahwa kode apa pun yang tidak diverifikasi sesuai dengan harapan Anda.