我应该在哪里存储30+ UIColors以供快速参考?

时间:2013-08-04 01:35:08

标签: ios cocoa-touch uicolor

我希望拥有30多个不变的UIColors,以便我可以在我的应用中轻松访问它们。我希望能够做到这样的事情:

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

我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分: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是一种更好的习惯。

答案 1 :(得分: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;