如何定义UIColor的常量值?
我想要做这样的事情,但我不能得到一个合作的语法。
static const UIColor *colorNavbar = [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0];
我想我可以定义macros,但它们很丑。
我喜欢使用类别来扩展这种types的新方法的类。 下面是我刚刚写的代码摘录:
@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,因为我更关注颜色。)
关于预先计算价值的更新:我的直觉是,这是不值得的。 但是,如果你真的想,你可以用静态variables来记忆值:
+ (UIColor *)paleYellowColor { static UIColor *color = nil; if (!color) color = [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0]; return color; }
你也可以让一个macros做记忆。
我通常为每个项目制作一个UIColor类别:
@interface UIColor (ProjectName) +(UIColor *) colorForSomeTable; +(UIColor *) colorForSomeControl; +(UIColor *) colorForSomeText; @end
随着执行中的常量:
@implementation UIColor (ProjectName) +(UIColor *) colorForSomeTable { return [UIColor colorWithRed:...]; } @end
我也根据需要为UIFont和UIImage做同样的事情。
你可以像这样定义一个类似的CONSTANT:
#define FAV_COLOR [UIColor colorWithRed:24/255.0f green:89/255.0f blue:36/255.0f alpha:0.9]
并像常用的常量那样按名称调用它: FAV_COLOR
希望有所帮助。
为了扩展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
是不可变的。
你可以这样做:
#define backgroundColorApp [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0]
在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()
#define textColorApp [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0] myLabel.textColor=textColorApp;
只需在常量文件中定义下面的macros,然后只传递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)];
我觉得还值得一提的是另一个很less被提及的真棒function:颜色文字。 它们不仅易于阅读,而且易于编辑。 在Swift中,
let color: UIColor = #colorLiteral(red: 0.9607843137, green: 0.4784313725, blue: 0.3215686275, alpha:
当粘贴到Xcode中时,此语法创build一个简单的颜色框。 点击这里看一个例子。
一旦你看到框,你可以双击它来轻松编辑。 同样,如果您有devise器中的颜色hex值的特定列表,则可以在各种IB选项(包括RGB滑块)之间切换。