Pregunta

Estoy en el proceso de agregar botones personalizados a la interfaz de usuario de mi iPhone y quiero que tengan el aspecto vidrioso de las aplicaciones de Apple.Tengo una buena imagen de vidrio predeterminada, pero odiaría tener una imagen separada para cada tono que quiero (rojo, verde, azul, etc.).

¿Hay alguna manera de cargar un PNG en escala de grises y ajustarlo al color que quiero?Mejor aún, ¿hay alguna manera de conseguir el aspecto vidrioso de Apple sin tener que cargar imágenes personalizadas?

¿Fue útil?

Solución

No existe una forma de una sola línea, que yo sepa, pero es posible que pueda obtener el efecto deseado tomando la imagen en escala de grises predeterminada y componiéndola con (es decir,dibujándolo encima de) un color sólido.Si consulta la documentación de Core Graphics, podrá ver que hay más de una docena de métodos de composición diferentes (por ejemplo, Color Burn) y alguna combinación de ellos puede producir el efecto que desea.

Otros consejos

Un poco tarde, pero por si alguien como yo busca este tipo de información:usar una UISegmentedControl con un solo botón, configúralo como momentary, y establezca su tintColor.De esta manera, no es necesario preparar tantos PNG como colores tenga, y el marco se encarga de todo el renderizado por usted.

Ejemplo:

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];

Hay una muestra en el siempre excelente sitio "Cocoa With Love": Dibujar gradientes de brillo en CoreGraphic

No sé acerca de la interfaz de usuario del iPhone, pero puedes usar un solo PNG para tener gráficos con variantes de color.

es decir.Ambos logotipos (arriba a la izquierda) en estas páginas:

Productos

Tiendas

Utilizar esta PNG

texto alternativo http://47 Degrees.com/images/logos/47_ Degrees.png

Supongo que es posible que necesites que el color de fondo esté configurado como tinte para que sea vidrioso.

He hecho esto y funciona bastante bien:

iOS:Aplicar un filtro RGB a un PNG en escala de grises

Sin embargo, es hacer trampa, es agregar, por lo que para (por ejemplo) el componente rojo de cada píxel, R_dest = R_src + R_tint

Si desea un control detallado, por ejemplo, es posible que desee extraer el valor de escala de grises para cada píxel promediando los componentes RGB (con la ponderación adecuada) y luego multiplicar este valor por su tinte, de modo que el color resultante sea escala de grises (Sr ,Sg,Sb) * {Tr,Tg,Tb}

Esto requeriría crear un fragmento de memoria, crear un contexto de mapa de bits que se atraiga a este fragmento, dibujar su imagen en este contexto, copiar todo el fragmento de memoria para su custodia, procesamiento, tomar datos de la copia y modificar el almacén de respaldo original, luego extrayendo una imagen del almacén de respaldo original y liberando todo lo que asignó.

Problema al reconstituir UIImage a partir de datos de bytes de píxeles RGBA

Esta biblioteca ha hecho todo por usted, no es la ruta más eficiente, pero hace el trabajo.iirc usa malloc cuando debería usar calloc.

Terminé creando mi propio botón personalizado que se asemeja mucho a la representación utilizada en el botón "Eliminar contacto" en la vista de edición de contactos.

Para aquellos interesados, se puede encontrar en github en

Botón PFTinted

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top