我希望拥有30多个不变的UIColors,以便我可以在我的应用中轻松访问它们。我希望能够做到这样的事情:
[self setBackgroundColor:[UIColor skyColor]];
[self setBackgroundColor:[UIColor dirtColor]];
[self setBackgroundColor:[UIColor yankeesColor]];
我该怎么做?
谢谢!
答案 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;