63

我想做这样的事情,但我无法获得合作语法。

static const UIColor *colorNavbar = [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0];

我想我可以定义宏,但它们很难看。

4

9 回答 9

126

我喜欢使用类别来扩展类,并为这类事情提供新方法。这是我今天刚刚写的代码的摘录:

@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;
}

你也可以制作一个宏来做记忆。

于 2010-04-27T03:58:02.290 回答
35

我通常为每个项目制作一个 UIColor 类别:

@interface UIColor (ProjectName)

+(UIColor *) colorForSomeTable;
+(UIColor *) colorForSomeControl;
+(UIColor *) colorForSomeText;

@end

使用实现中的常量:

@implementation UIColor (ProjectName)

+(UIColor *) colorForSomeTable { return [UIColor colorWithRed:...]; }

@end

我也根据需要对 UIFont 和 UIImage 做同样的事情。

于 2010-04-27T04:42:35.863 回答
11

如果您想预先计算值(或只执行一次),请扩展 jasoncrawford 的答案(我会将其作为评论,但您不能在评论中格式化代码)。

+ (UIColor *)paleYellowColor
{
    static UIColor* paleYellow = nil;
    if (paleYellow == nil)
    {
        paleYellow = [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
    }
    return paleYellow;
}

您最初的想法不起作用的原因是编译器只能在函数之外使用初始化程序,而不是普通代码。你可以用初始化方法实现你想要的东西,例如

static UIColor* colorNavBar = nil;

+(void) initialize
{
    if (colorNavBar != nil)
    {
        colorNavBar = ....
    }
}

注意const原始定义上的限定符是多余的,因为UIColor无论如何都是不可变的。

于 2010-04-27T08:21:35.990 回答
11

您可以像这样“定义”一个类似的 CONSTANT:

#define FAV_COLOR [UIColor colorWithRed:24/255.0f green:89/255.0f blue:36/255.0f alpha:0.9]

并像您习惯使用常量一样按名称调用它:FAV_COLOR

希望有帮助。

于 2013-05-28T11:29:23.273 回答
8

你可以这样做:

#define backgroundColorApp [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0]
于 2011-12-30T08:37:54.540 回答
6

在 Swift 中,定义一个扩展:

extension UIColor {
    
   class func XXXWhiteColor() -> UIColor {
        return UIColor(red: 256, green: 256, blue: 256, alpha: 1.0)
    }
 
    class func XXXGreenColor() -> UIColor {
        return UIColor(red: 73/255.0, green: 212/255.0, blue: 86/255.0, alpha: 1.0)
    }
}

像这样使用:

label.background = UIColor.XXXWhiteColor()
于 2015-04-19T18:41:06.740 回答
4
#define textColorApp [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0]

myLabel.textColor=textColorApp;
于 2014-04-11T06:51:36.463 回答
1

只需在常量文件中定义以下宏并仅传递 RGB 值并在您想要的任何地方使用

#define RGBCOLOR(r,g,b)[UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1]

要使用:

[lblCount setTextColor:RGBCOLOR(236, 43, 92)];
于 2015-09-23T11:19:28.930 回答
0

我觉得还值得一提的是另一个很少被提及的很棒的功能:Color Literals。它们不仅更易于阅读,而且更易于编辑。在斯威夫特,

let color: UIColor = #colorLiteral(red: 0.9607843137, green: 0.4784313725, blue: 0.3215686275, alpha: 

当粘贴到 Xcode 中时,此语法会创建一个简单的颜色框。 单击此处查看示例。

看到该框后,您可以双击它以轻松编辑它。同样,您可以在各种 IB 选项之间切换,包括RGB Sliders,如果您有来自您的设计师的颜色十六进制值的特定列表。

于 2016-12-14T21:41:58.987 回答