Créer ses propres couleurs (UIColor/NSColor)
Bonjour,
je suis en train de me demander comment faire mes propres couleurs, mais des couleurs un peu spéciale, je voudrais des dégradés (Gradient quartz 2D).
J'ai vu qu'il y avais la classe CGGradient qui permet de dessiner dans un contexte des grandients, mais le souci c'est que du coup ça oblige à sous classé une vue pour dessiner dedans. Moi je voudrais simplement pouvoir changer le backgroundColor en gros.
J'ai vu qu'on pouvais utiliser [UIColor colorWithPatternImage:@...]; Sauf que là je perd la transparence si j'en avais dans l'image
Et puis c'est pas très souple, ça oblige à avoir une image juste de la bonne taille sinon ça duplique l'image pour remplir ou bien au contraire ça croppe si l'image est trop grande.
Alors je me suis dit, pourquoi pas sous classer UIColor/NSColor voir même faire une Catégorie, mais là je bloque je vois pas du tout comment faire. En gros je voudrais par programmation dire: Je veux tel couleur à ce point puis un dégradé jusqu'à cette autre couleur à cet autre point.
Any idea?
je suis en train de me demander comment faire mes propres couleurs, mais des couleurs un peu spéciale, je voudrais des dégradés (Gradient quartz 2D).
J'ai vu qu'il y avais la classe CGGradient qui permet de dessiner dans un contexte des grandients, mais le souci c'est que du coup ça oblige à sous classé une vue pour dessiner dedans. Moi je voudrais simplement pouvoir changer le backgroundColor en gros.
J'ai vu qu'on pouvais utiliser [UIColor colorWithPatternImage:@...]; Sauf que là je perd la transparence si j'en avais dans l'image

Et puis c'est pas très souple, ça oblige à avoir une image juste de la bonne taille sinon ça duplique l'image pour remplir ou bien au contraire ça croppe si l'image est trop grande.
Alors je me suis dit, pourquoi pas sous classer UIColor/NSColor voir même faire une Catégorie, mais là je bloque je vois pas du tout comment faire. En gros je voudrais par programmation dire: Je veux tel couleur à ce point puis un dégradé jusqu'à cette autre couleur à cet autre point.
Any idea?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ce qui peut en effet paraà®tre étrange, dans le sens où j'aurais tendance à te justifier ça par "car UIColor ne représente que des couleurs unies"... sauf qu'en effet il y a les "colorWithPatternImage" qui dérogent à cette règle... Mais bon, dans tous les cas ça signifie que la couleur ou le motif (pattern) ne dépendent pas de la taille de l'objet à "colorier", alors que pour un gradient il faut effectuer un calcul qui dépend de la taille de l'objet, et donc il faut qu'il calcule la couleur de chaque point de l'objet à colorier, c'est pas juste une répétition d'un motif jusqu'à épuisement.
Tu peux toujours te faire une classe pour encapsuler le code nécessaire à CGGradient, pour te permettre de manipuler ça de façon plus "Cocoa-esque" avec des UIColor, genre une classe GSGradient qui prendrait 2 UIColors en paramètre pour se construire et une méthode qui demande de dessiner le gradient dans le contexte graphique actuel, prenant un vecteur ou un angle en paramètre pour indiquer l'orientation du gradient à dessiner... mais de là à réussir à intégrer ça dans une catégorie de UIColor j'en doute fort.
Il me paraà®t par exemple impossible de créer une UIColor modifiée, que tu pourrais affecter à une propriété comme backgroundColor d'une UIView, pour réaliser un gradient. Je peux me tromper (et j'espère car en effet ça serait bien pratique) mais à mon avis c'est pas gagné
Cela dit, créer une sous-classe de UIView n'est pas très difficile.
En gros je fait rapidement une image de quelques pixel de large et de la longueur de la vue ou je veut mettre un background, c'est pas long mais c'est quand même moins pratique que [UIColor greyGradientColor];
Je pensais bien à faire a propre UIView mais ça conviens pas non plus, c'est pas du tout réutilisable, enfin je trouve pas ça très propre par rapport aux catégorie qui me semble être idéale pour ça.
Je m'en vais écrire à Steve, qu'il gueule un peu sur ses troupes pour qu'elles se bougent