Cyborg é um porto parcial do Vecordrawable do Android para o iOS. Destina -se como um substituto para UIIMAGES, ICON Fonts e opção de imagem vetorial PDF da Apple. O formato Vectordrawable fornece várias vantagens:
O Cyborg também suporta MacOS (AppKit), TvOS e pode ser usado no SwiftUi. No entanto, esteja ciente de que essas implementações são atualmente menos maduras que a versão iOS.
Realizamos o Cyborg contra várias alternativas, carregando os mais de 50 ícones contidos no conjunto de ícones do nosso aplicativo de motorista.
UIImage
. As diferenças devem estar nas frações de milissegundos na práticaSe o desempenho da análise se tornar um problema, convém implementar um mecanismo de cache apropriado para o seu aplicativo ou aproveitar a segurança do tópico do Cyborg para executar a análise do encadeamento principal.
Com isso dito, atualmente existem muitas oportunidades de melhoria de desempenho, portanto, o desempenho deve melhorar no futuro. Até o momento em que este artigo foi escrito, Swift é um idioma jovem, e as melhorias de desempenho, principalmente na criação de cordas, fechamentos e propriedade, também devem ter um impacto positivo no desempenho de Cyborg.
A lista completa de recursos é enumerada na documentação do Android.
O Cyborg suporta o Swift Package Manager e o Cartago.
Para instalar usando Cartago:
github "uber/cyborg" ~> [desired version]
Para adicionar o Cyborg a um projeto Xcode usando o Swift Package Manager, siga as instruções fornecidas pela Apple.
Depois de seguir as etapas de integração abaixo, o uso do cyborg requer apenas um pouco mais de código do que o uso de um UIImage
:
let vectorView = VectorView ( theme : myTheme )
vectorView . drawable = VectorDrawable . named ( " MyDrawable " )
Cyborg é feito para aumentar os casos de usos complexos e, como tal, exigem um pouco de configuração para obter a amostra de código limpo acima.
Vamos ver como escrever a integração mínima para começar:
Uma das melhores características dos Vectordrawables é a capacidade de trocar em valores arbitrários em tempo de execução. Os ativos Vectordrawable bem de autoria podem alterar suas cores em resposta a mudanças no estado do aplicativo, como um modo noturno.
No entanto, obter acesso a esses recursos poderosos exige que escrevamos nosso próprio tema e provedores de recursos:
class Theme : Cyborg . ThemeProviding {
func colorFromTheme ( named _ : String ) -> UIColor {
return . black
}
}
class Resources : ResourceProviding {
func colorFromResources ( named _ : String ) -> UIColor {
return . black
}
}
Supondo que os recursos nunca mudem, agora podemos escrever o inicializador de conveniência representado na primeira amostra de código:
fileprivate let resources = Resources ( )
extension VectorDrawable {
public convenience init ( theme : Theme ) {
self . init ( theme : theme , resources : resources ( )
}
}
Se, por algum motivo, você fornecer um vectordrawable inválido para o Cyborg, a função de criação padrão no cyborg fornecerá uma mensagem de erro detalhada que você pode relatar como um não fatal ao serviço de relatório de falha de sua escolha e uso para depurar localmente. Isso pode ser tratado no nível da "plataforma" do seu aplicativo, permitindo que você escreva código que assume que a análise sempre é bem -sucedida, assim como no 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
}
}
}
Como você já deve ter notado, o tema e os objetos de recursos que você escreveu em uma seção anterior são com força. Para evitar problemas com ativos que referenciam o tema inexistente ou as cores dos recursos, você pode querer fins os arquivos XML para garantir que eles sejam válidos.
Você pode achar conveniente permitir que os designers cometam novos ativos diretamente em um repositório que pode ser puxado para os repositórios do Android e do iOS por designers.
A maneira mais fácil de garantir a correção das suas UIs que usam desenhos de vetores estáticos é o teste de instantâneo das UIs que as usam usando uma ferramenta como o IossNAPShotTestcase. Isso garantirá que qualquer código que não seja verificado com o Compiler corresponda às suas expectativas.