Cores no Xcode

02 janeiro, 2019

A partir da versão 9 do Xcode é possível criar e utilizar seu próprio catálogo de cores (Named Colors) no arquivo Assets.xcassets. O conjunto de cores não se limita ao arquivo padrão de assets. É possível criar um novo arquivo .xcassets especialmente para armazenar as cores.

O uso dessa funcionalidade é suportada a partir do iOS 11.

Dessa maneira, será necessário cadastrar o código das cores uma única vez. Isso facilita eventuais alterações no código e evita que programadores definam diferentes do escopo do projeto. Para utilizar alguma cor pré-definida basta acessá-la pelo seu nome de identificação.

Cadastrando novas cores

Com o arquivo .xcassets aberto na listagem dos assets aparece a opção New Color Set no menu de contexto.

Adicionar cor

Em seguida, você pode definir o nome e o valor da cor com o formato de preferência direto no Attributes inspector.

Nova cor

Acessando o catálogo de cores

Uma vez nomeado a cor é possível utilizar via código da seguinte maneira:

let color = UIColor(named: "highlight")

A alternativa mais s egura para acessar um conjunto de cores é primeiro validar a versão do dispositivo. Nesse exemplo foi criado uma extensão da classe UIColor para facilitar a utilização:

extension UIColor {
    @objc class var highlight: UIColor {
        if #available(iOS 11.0, *) {
            return UIColor(named: "highlight") ?? .purple
        } else {
            return .rgb(red: 138, green: 99, blue: 223)
        }
    }
}

O retorno da validação pode ser feito de outras maneira, como retornando o valor hexString. No exemplo criei a função rgb com o mesmo valor do asset.

extension UIColor {
    static func rgb(red: CGFloat, green: CGFloat, blue: CGFloat) -> UIColor {
        return UIColor.init(red: red/255, green: green/255, blue: blue/255, alpha: 1)
    }
}

Muito verboso

Precisamos concordar que utilizar cores por mais prático que seja ainda é muito verboso.

Para isso temos outra maneira mais visual de obter o mesmo resultado. Ao digital colorliteral no seu código o Xcode irá sugestir o Color Literal que quando selecionado exibe um picker de cores.

Porém não é possível acessar as Named Colors pelo Color Literal. Mas o código fica mais fácil de visualizar as cores pois sua representação é totalmente visual:

Color Literal