我的首选方法是完全避免使用UIColor 和NSColor,并尽可能简单地使用CGColorRef。
Core Animation 是在 iOS 和 OS X 上绘制的最佳/最现代的方式。它需要 CGColorRef 对象并且(几乎)是跨平台的。
唯一的缺点是,作为较低级别的数据类型,ARC 不能为您处理内存管理。但是手动内存管理并不难。
CGColorRef 的用法:
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGFloat componennts[4] = {255, 255, 255, 255}; // white, with 100% opacity. Use {0,0,0,255} for black, or {255,0,0,127.5} for red with 50% opacity.
CGColorRef color = CGColorCreate(colorSpace, componennts);
CGColorSpaceRelease(space);
layer.backgroundColor = color; // layer is a CALayer object
CGColorRelease(color);
您可以通过将颜色空间对象存储在静态变量中来避免创建/释放它:
static CGColorSpaceRef colorSpace;
@implementation MyClass
+ (void)initialize
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
colorSpace = CGColorSpaceCreateDeviceRGB();
});
}
- (void)blah
{
CGFloat componennts[4] = {255, 255, 255, 255}; // white, with 100% opacity. Use {0,0,0,255} for black, or {255,0,0,127.5} for red with 50% opacity.
CGColorRef color = CGColorCreate(space, componennts);
layer.backgroundColor = color; // layer is a CALayer object
CGColorRelease(color);