我想拥有 30 多个常量 UIColors,这样我就可以在我的应用程序中轻松访问它们。我希望能够做这样的事情:
[self setBackgroundColor:[UIColor skyColor]];
[self setBackgroundColor:[UIColor dirtColor]];
[self setBackgroundColor:[UIColor yankeesColor]];
我怎样才能做到这一点?
谢谢!!
我想拥有 30 多个常量 UIColors,这样我就可以在我的应用程序中轻松访问它们。我希望能够做这样的事情:
[self setBackgroundColor:[UIColor skyColor]];
[self setBackgroundColor:[UIColor dirtColor]];
[self setBackgroundColor:[UIColor yankeesColor]];
我怎样才能做到这一点?
谢谢!!
为 定义一个类别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
。
您可以像这样添加行:
#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;