J'aime utiliser les catégories pour étendre les classes avec de nouvelles méthodes pour ce genre de choses. Voici un extrait de code que je viens d'écrire aujourd'hui :
@implementation UIColor (Extensions)
+ (UIColor *)colorWithHueDegrees:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness {
return [UIColor colorWithHue:(hue/360) saturation:saturation brightness:brightness alpha:1.0];
}
+ (UIColor *)aquaColor {
return [UIColor colorWithHueDegrees:210 saturation:1.0 brightness:1.0];
}
+ (UIColor *)paleYellowColor {
return [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
}
@end
Maintenant, en code, je peux faire des choses comme :
self.view.backgroundColor = highlight? [UIColor paleYellowColor] : [UIColor whitecolor];
et mes propres couleurs définies s'intègrent parfaitement à celles définies par le système.
(Soit dit en passant, je commence à penser davantage en termes de HSB qu'en termes de RVB, car je prête davantage attention aux couleurs).
UPDATE concernant le précalcul de la valeur : Mon intuition me dit que ça n'en vaut pas la peine. Mais si vous voulez vraiment, vous pouvez mémoriser les valeurs avec des variables statiques :
+ (UIColor *)paleYellowColor {
static UIColor *color = nil;
if (!color) color = [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
return color;
}
Vous pourriez aussi créer une macro pour faire la mémorisation.
0 votes
Oui, Objective-C pour être plus spécifique au langage - mais c'est sur l'iPhone dans ce cas.
0 votes
static UIColor *const color = ....
est possible en Objective-C++. Il suffit de changer l'extension pour*.mm
.