0

我想拥有 30 多个常量 UIColors,这样我就可以在我的应用程序中轻松访问它们。我希望能够做这样的事情:

 [self setBackgroundColor:[UIColor skyColor]];
 [self setBackgroundColor:[UIColor dirtColor]];
 [self setBackgroundColor:[UIColor yankeesColor]];

我怎样才能做到这一点?

谢谢!!

4

2 回答 2

14

为 定义一个类别UIColor

在 UIColor+MyColors.h 中:

@interface UIColor (MyColors)

+ (UIColor *)skyColor;
+ (UIColor *)dirtColor;
// and the rest of them

@end

在 UIColor+MyColors.m 中:

@implementation UIColor (MyColors)

+ (UIColor *)skyColor {
    static UIColor color = nil;
    if (!color) {
        // replace r, g, and b with the proper values
        color = [UIColor colorWithRed:r green:g blue:b alpha:1];
    }

    return color;
}

+ (UIColor *)dirtColor {
    static UIColor color = nil;
    if (!color) {
        // replace r, g, and b with the proper values
        color = [UIColor colorWithRed:r green:g blue:b alpha:1];
    }

    return color;
}

// and the rest

@end

编辑:

正如 Martin R 所指出的,一种更现代的初始化静态color变量的方法是:

+ (UIColor *)skyColor {
    static UIColor color = nil;
    static dispatch_once_t predicate = 0;

    dispatch_once(&predicate, ^{
        // replace r, g, and b with the proper values
        color = [UIColor colorWithRed:r green:g blue:b alpha:1];
    });

    return color;
}

nil在这种情况下,这实际上可能是矫枉过正,因为如果两个线程碰巧使用原始代码同时初始化静态变量,则不会产生不良的副作用。但它是一个更好的使用习惯dispatch_once

于 2013-08-04T01:50:17.673 回答
1

您可以像这样添加行:

#define kFirstColor [UIColor whiteColor]
#define kSecondColor [UIColor colorWithRed:100.0/255 green:100.0/255 blue:100.0/255 alpha:1.0]

在类的开头或将 Color.h 标头添加到您的项目并在需要时将其导入。

#import "Color.h"

然后你可以这样使用你的自定义颜色:

self.view.backgroundColor = kSecondColor;
于 2013-08-04T01:48:17.540 回答