Como posso criar uma UIColor
a partir de um hexadecimal formato de string, como #00FF00
?
ios
cocoa-touch
uicolor
Rupesh
fonte
fonte
Respostas:
Eu encontrei a maneira mais simples de fazer isso é com uma macro. Basta incluí-lo no cabeçalho e ele estará disponível em todo o projeto.
macro uicolor com valores hexadecimais
Versão também formatada deste código:
Uso:
fonte
Uma solução concisa:
fonte
if ( [hexString rangeOfString:@"#"].location == 0 )
antes dasetScanLocation
linha para tornar o#
opcional.Eu tenho uma solução que é 100% compatível com as seqüências de formato hexadecimal usadas pelo Android, que achei muito úteis ao desenvolver o desenvolvimento móvel de plataforma cruzada. Permite-me usar um paleta de cores para ambas as plataformas. Sinta-se livre para reutilizar sem atribuição, ou sob a licença Apache, se preferir.
fonte
colorComponentFrom:start:length:
, você não deveriareturn hexComponent / 0xFF; // divide by 255, not 256
? O maior valor hexadecimal que você deve recuperar é 0xFF, portanto é isso que você deve dividir por 0xFF (255).[@"#538aa4" toColor]
Há um bom post sobre como lidar com a questão do OP de extrair um
UIColor
de uma string hexadecimal. A solução apresentada abaixo é diferente das demais porque suporta valores de cadeia que podem incluir '0x' ou '#' prefixados na representação de cadeia hexadecimal ... (consulte o uso)Aqui está a parte principal ...
Método auxiliar ...
Uso:
Artigo de referência completo
Swift 2+
Portamos esta solução para o Swift 2.2. Observe que eu mudei o
alpha
parâmetro para usar um conjunto padrão como 1.0. Também atualizei o tipo intUInt32
conforme exigido pelaNSScanner
classe no Swift 2.2.Swift 4+
Usando a mesma lógica com as alterações aplicadas no swift 4,
fonte
alpha
a já ser definido a zero? Como esse método oferece às pessoas essa capacidade, e se alguém decidir definiralpha
como zero, o desembrulhamento forçado desse opcional invariavelmente levará a uma falha. Eu não a editei, no entanto, caso haja alguma justificativa da qual eu não esteja ciente.Esta é uma função que pega uma string hexadecimal e retorna um UIColor.
(Você pode inserir cadeias hexadecimais com o formato:
#ffffff
ouffffff
)Uso:
Swift 4:
Swift 3:
Swift 2:
Fonte: arshad / gist: de147c42d7b3063ef7bc
fonte
Use esta categoria:
no arquivo UIColor + Hexadecimal.h
no arquivo UIColor + Hexadecimal.m
Na classe você deseja usá-lo:
e:
fonte
Uma ótima implementação do Swift (atualizada para o Xcode 7) usando extensões, reunidas em uma variedade de respostas e lugares diferentes. Você também precisará das extensões de string no final.
Usar:
NOTA: Adicionei uma opção para 2 dígitos adicionais ao final do valor hexadecimal padrão de 6 dígitos para um canal alfa (passe o valor de
00
-99
). Se isso o ofender, basta removê-lo. Você pode implementá-lo para transmitir um parâmetro alfa opcional.Extensão:
Extensões de
sequência : origem flutuante Origem
subscrita
fonte
countElements()
foi substituído pelocount()
Swift 1.2, ele é incorporado ao idioma. Eu atualizei minha resposta para refletir isso.Você pode fazer uma extensão como esta
E use-o em qualquer lugar como este
fonte
#00FF00
claramente pretende ser uma string de caracteres. Como outros já disseram, é simples, conciso. Mas se não lida com strings, não é possível responder a uma pergunta perguntando como lidar com strings.Não há conversão interna de uma sequência hexadecimal para um
UIColor
(ouCGColor
) que eu saiba. No entanto, você pode escrever facilmente algumas funções para esse fim - por exemplo, consulte desenvolvimento do iphone acessando componentes uicolorfonte
+colorWithHexString:
não funciona. Ao menos em meu caso. :)Encontrei uma boa
UIColor
categoria para isso, UIColor + PXExtensions .Uso:
UIColor *mycolor = [UIColor pxColorWithHexValue:@"#BADA55"];
E, caso o link para minha essência falhe, aqui está o código de implementação real:
fonte
versão rápida. Use como uma função ou uma extensão.
Função Extensão Como ligar Você também pode definir o seuHex Color
construtor de interface.fonte
Essa é outra alternativa.
fonte
Você pode usar várias ferramentas online para converter uma string HEX em um UIColor real. Confira uicolor.org ou UI Color Picker . A saída seria convertida em código Objective-C, como:
Qual você pode incorporar no seu aplicativo. Espero que isto ajude!
fonte
SWIFT 4
Você pode criar um bom
convenience
construtor na extensão assim:E use-o mais tarde como
fonte
Uso:
fonte
Isso é legal com cocoapod suporte do
https://github.com/mRs-/HexColors
fonte
Outra versão com alfa
fonte
Rápido equivalente à resposta de @ Tom, apesar de receber o valor RGBA Int para dar suporte à transparência:
E se você quiser usá-lo a partir de string, você pode usar strtoul:
fonte
Aqui está uma
Swift 1.2
versão escrita como uma extensão paraUIColor
. Isso permite que você façaQual sinto ser a maneira mais natural de fazê-lo.
fonte
let greenRange = ...
eu recebo uma exceção:fatal error: can not increment endIndex
Outra implementação que permite strings como
"FFF"
ou"FFFFFF"
e usando alpha:fonte
atualizado para o swift 1.2
fonte
Crie uma extensão elegante para
UIColor
:Crie cor vermelha:
fonte
fonte
fonte
Eu gosto de garantir o alfa além da cor, então eu escrevo minha própria categoria
fácil de usar assim
fonte
Eu criei um init de conveniência para isso:
então você pode criar um UIColor em qualquer lugar do seu projeto, assim:
espero que isto ajude...
fonte
Você pode criar a classe de extensão do UIColor como: -
extensão UIColor {
// MARK: - getColorFromHex / ** Esta função converte o código Hex da cor em RGB.
}
fonte
Para o Swift 2.0+. Esse código funciona bem para mim.
Este código inclui a verificação do formato da string. por exemplo
E, tanto quanto eu sei, meu código não tem desvantagem por manter a semântica da condição com falha e retornar um valor opcional. E essa deve ser a melhor resposta.
fonte
A versão Swift 2.0 da solução que manipulará o valor alfa da cor e com o tratamento perfeito de erros está aqui:
fonte
Uso
fonte