Pergunta

Eu estou no processo de adicionar botões personalizados para o meu iPhone UI e quer fazê-los ter o olhar vítreo a partir de aplicativos da Apple. Eu tenho no vidro um bom padrão, mas eu odiaria ter que ter uma imagem separada para cada tonalidade eu quero (vermelho, verde, azul, etc.).

Existe uma maneira de carregar um arquivo PNG em tons de cinza e ajustá-lo para a cor que eu quero? Melhor ainda, se existe uma maneira de obter olhar vítreo da Apple sem a necessidade de imagens personalizadas de carga em tudo?

Foi útil?

Solução

Não há uma maneira única linha que eu saiba, mas você pode ser capaz de obter o efeito desejado, tomando a imagem em tons de cinza padrão e composição com (ou seja, puxando-o em cima de) uma cor sólida. Se você olhar através da documentação Core Graphics, você pode ver, existem mais de uma dúzia de diferentes métodos de composição (por exemplo, Color Burn), e alguma combinação deles pode produzir o efeito desejado.

Outras dicas

Um pouco tarde, mas no caso de alguém como me procura por este tipo de informação: use um UISegmentedControl com um único botão, defina-o como momentary e defina sua tintColor. Desta forma, não há necessidade de preparar tantos PNGs como você tem cores, eo quadro cuida de toda a renderização para você.

Exemplo:

UISegmentedControl *cancelButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Cancel"]];
[cancelButton setSegmentedControlStyle:UISegmentedControlStyleBar];
[cancelButton setTintColor:[UIColor colorWithRed:0.8 green:0.3 blue:0.3 alpha:1.0]];
[cancelButton setMomentary:YES];
[cancelButton addTarget:self action:@selector(didTapCancel:) forControlEvents:UIControlEventValueChanged];
[self addSubview:cancelButton];
[cancelButton release];

Há uma amostra no sempre excelente local "Cacau With Love": gradientes de desenho brilho em CoreGraphic

Eu não sei sobre iPhone UI, mas você pode usar um único PNG ter cor variantes gráficos.

i. Ambos os logos (canto superior esquerdo) sobre estas páginas:

produtos

Lojas

Use esta PNG

alt texto http://47degrees.com/images/logos/47_degrees.png

Eu presumo que você pode precisar o conjunto cor de fundo como uma tonalidade para ser vítreo.

Eu tenho feito isso e ele funciona muito bem:

iOS: Aplicando um filtro RGB para um PNG em tons de cinza

No entanto, ele é batota, isto é adicionando, assim, para (por exemplo) o componente vermelho de cada pixel, R_dest = R_src + R_tint

Se você quer o controle de grão fino, por exemplo, você pode querer extrair o valor em escala de cinza para cada pixel pela média das componentes RGB (com ponderação apropriado), e em seguida, multiplicar esse valor pelo seu tom, assim que a cor resultante seria escala de cinzentos (Sr, Sg, Sb) * {Tr, Tg, Tb}

Isso exigiria a criação de um pedaço de memória, criando um contexto de bitmap que se baseia em este pedaço, desenhando sua imagem a este contexto, a cópia de todo o pedaço de memória para a custódia, processamento - obtenção de dados a partir da cópia e modificando o apoio originais loja, em seguida, extrair uma imagem a partir do armazenamento de backup original e liberando tudo o que você alocado.

Problema reconstituir UIImage de RGBA dados de pixel byte

Esta biblioteca tem feito tudo para você, não é a rota mais eficiente, mas ele começa o trabalho feito. IIRC ele usa malloc quando ele deve estar usando calloc.

I acabou criando meu próprio botão personalizado que corresponde de perto a renderização usado no botão "Excluir Contato" na vista de contactos de edição.

Para os interessados, que podem ser encontrados no github em

PFTintedButton

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top