如何定义UIColor的常量值?

mob*_*bob 60 cocoa-touch const objective-c uicolor

我想做这样的事情,但我不能得到合作的语法.

static const UIColor *colorNavbar = [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0];
Run Code Online (Sandbox Code Playgroud)

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

jas*_*ord 125

我喜欢使用类别来扩展具有此类事物的新方法的类.这是我刚才写的代码的摘录:

@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
Run Code Online (Sandbox Code Playgroud)

现在在代码中我可以做以下事情:

self.view.backgroundColor = highlight? [UIColor paleYellowColor] : [UIColor whitecolor];
Run Code Online (Sandbox Code Playgroud)

我自己定义的颜色与系统定义的颜色一致.

(顺便说一下,我开始考虑HSB而不是RGB,因为我更注重颜色.)

关于预先计算价值的更新:我的预感是它不值得.但如果您真的想要,可以使用静态变量来记忆值:

+ (UIColor *)paleYellowColor {
    static UIColor *color = nil;
    if (!color) color = [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
    return color;
}
Run Code Online (Sandbox Code Playgroud)

你也可以让宏做备忘录.

  • 将上面的代码保存在UIColor_MyColors.m中,然后使用以下命令创建UIColor_MyColors.h:`#import <UIKit/UIKit.h> @interface UIColor()+(UIColor*)aquaColor; @ end`使用它导入UIColor_MyColors.h`#import"UIColor_QuizColor.h"`并引用这样的颜色:`[self.view setBackgroundColor:[UIColor aquaColor]];` (3认同)

dra*_*ard 35

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

@interface UIColor (ProjectName)

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

@end
Run Code Online (Sandbox Code Playgroud)

使用实现中的常量:

@implementation UIColor (ProjectName)

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

@end
Run Code Online (Sandbox Code Playgroud)

我也根据需要为UIFont和UIImage做同样的事情.

  • 绝对棒极了!我的附属问题是,在哪里放这个代码?我有Constants.h/Constants.m文件(在我的预编译头文件中)我只是想"声明"一个恒定的颜色......我不喜欢把这种代码放在那里......你会把它放在哪里? (4认同)

Jer*_*myP 11

要扩展jasoncrawford的答案(我将其作为注释,但你不能在注释中格式化代码),如果你想预先计算值(或只做一次).

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

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

static UIColor* colorNavBar = nil;

+(void) initialize
{
    if (colorNavBar != nil)
    {
        colorNavBar = ....
    }
}
Run Code Online (Sandbox Code Playgroud)

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


小智 11

您可以像这样"定义"类似的CONSTANT:

#define FAV_COLOR [UIColor colorWithRed:24/255.0f green:89/255.0f blue:36/255.0f alpha:0.9]
Run Code Online (Sandbox Code Playgroud)

并按名称调用它,就像你习惯常量一样: FAV_COLOR

希望有所帮助.


int*_*dro 8

你可以这样做:

#define backgroundColorApp [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0]
Run Code Online (Sandbox Code Playgroud)

  • 当有更类型安全或编译器安全的替代方案可用时,我会避免使用宏解决方案。您可能会在我的原始描述中注意到,我承认有一个“宏观”解决方案,但它们“丑陋”。丑陋出现在这种情况下,因为有一个使用语言的类别功能的干净解决方案。 (2认同)

sel*_*lva 5

在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)
    }
}
Run Code Online (Sandbox Code Playgroud)

使用方法如下:Label.background = UIColor.XXXWhiteColor()