Question

Je suis en train d'ajouter des boutons personnalisés à l'interface utilisateur de mon iPhone et je veux leur donner l'aspect vitreux des applications Apple. J'ai une bonne image de verre par défaut, mais je détesterais avoir une image séparée pour chaque teinte que je veux (rouge, vert, bleu, etc.).

Existe-t-il un moyen de charger un fichier PNG en niveaux de gris et de l’ajuster à la couleur souhaitée? Mieux encore, y a-t-il moyen d'obtenir le look vitreux d'Apple sans avoir à charger des images personnalisées?

Était-ce utile?

La solution

À ma connaissance, il n’existe pas de solution unique, mais vous pouvez obtenir l’effet souhaité en prenant l’image en niveaux de gris par défaut et en la composant avec (en la dessinant par dessus) une couleur unie. Si vous parcourez la documentation Core Graphics, vous constaterez qu'il existe plus d'une douzaine de méthodes de composition différentes (par exemple, Color Burn), et qu'une combinaison de ces méthodes peut produire l'effet souhaité.

Autres conseils

Un peu tard, mais si quelqu'un comme moi recherche ce type d'informations: utilisez un UISegmentedControl avec un seul bouton, définissez-le comme momentané et définissez son teinteCouleur . Ainsi, nul besoin de préparer autant de fichiers PNG que vous avez de couleurs et le framework prend en charge tout le rendu pour vous.

Exemple:

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

Il y en a un exemple au toujours excellent "Cocoa With Love". site: Tracé de dégradés de brillance dans CoreGraphic

Je ne connais pas l'interface utilisateur de l'iPhone, mais vous pouvez utiliser un seul fichier PNG pour créer des variantes de couleur.

i.e. Les deux logos (en haut à gauche) sur ces pages:

Produits

Boutiques

Utilisez ce fichier PNG

.

texte alternatif http://47degrees.com/images/logos/47_degrees.png

Je suppose que vous aurez peut-être besoin de la couleur d'arrière-plan définie comme une teinte pour être vitreuse.

J'ai fait ça et ça marche plutôt bien:

iOS: application d'un filtre RVB à un PNG en niveaux de gris

Cependant, il triche, il ajoute, donc pour (par exemple) la composante rouge de chaque pixel, R_dest = R_src + R_tint

Si vous souhaitez un contrôle précis, par exemple, vous pouvez extraire la valeur de l'échelle de gris pour chaque pixel en faisant la moyenne des composants RVB (avec une pondération appropriée), puis multiplier cette valeur par votre nuance. Ainsi, la couleur résultante sera: niveaux de gris (Sr, Sg, Sb) * {Tr, Tg, Tb}

Cela nécessiterait de créer un bloc de mémoire, de créer un contexte bitmap qui dessine dans ce bloc, de dessiner votre image dans ce contexte, de copier le bloc de mémoire entier pour le sauvegarder, de le traiter - de prendre des données de la copie et de modifier le support d'origine. stocker, puis extraire une image du magasin de sauvegarde d'origine et libérer tout ce que vous avez alloué.

Un problème de reconstitution de UIImage à partir de données pixel par octets RGBA

Cette bibliothèque a tout fait pour vous, ce n’est pas la route la plus efficace, mais elle fait le travail. iirc il utilise malloc alors qu'il devrait utiliser calloc.

J'ai fini par créer mon propre bouton personnalisé qui correspond étroitement au rendu utilisé dans l'option "Supprimer le contact". bouton dans la vue d'édition des contacts.

Pour ceux que cela intéresse, vous pouvez le trouver sur github à

PFTintedButton

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top