Мне нравится использовать категории для расширения классов новыми методами для такого рода вещей. Вот фрагмент кода, который я только что написал сегодня:
@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
Теперь в коде я могу делать такие вещи, как:
self.view.backgroundColor = highlight? [UIColor paleYellowColor] : [UIColor whitecolor];
и мои собственные определенные цвета вписываются прямо в системные цвета.
(Между прочим, я начинаю думать больше о HSB, чем о RGB, поскольку больше внимания уделяю цветам.)
ОБНОВЛЕНИЕ относительно предварительного вычисления значения: Я догадываюсь, что оно того не стоит. Но если вы действительно хотите, вы можете запомнить значения со статическими переменными:
+ (UIColor *)paleYellowColor {
static UIColor *color = nil;
if (!color) color = [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
return color;
}
Вы также можете сделать макрос, чтобы сделать памятку тоже.