当我使用从CGColorGetComponents
返回的CGColor
致电UIColor
时,它似乎正常正常工作除了白色和黑色。
这是代码......
CGColorRef myColorRef = [[UIColor whiteColor] CGColor];
const CGFloat * colorComponents = CGColorGetComponents(myColorRef);
NSLog(@"r=%f, g=%f, b=%f, a=%f",
colorComponents[0],
colorComponents[1],
colorComponents[2],
colorComponents[3]);
记录
r=1.000000, g=1.000000, b=0.000000, a=0.000000
注意B和A都是零,而不是一个。
如果你替换其他颜色,如redColor,blueColor等,它可以工作...... RGB和A值设置为人们所期望的。但同样,黑色和白色产生奇怪的结果。这个功能有问题,还是我应该做一些变通办法/任务?
答案 0 :(得分:32)
[UIColor whiteColor]
和[UIColor blackColor]
使用[UIColor colorWithWhite:alpha:]
创建UIColor。这意味着这个CGColorRef只有2个颜色成分,而不是用[UIColor colorWithRed:green:blue:alpha:]
创建的4种颜色。
当然你也可以NSLog那些。
if (CGColorGetNumberOfComponents(myColorRef) == 2) {
const CGFloat *colorComponents = CGColorGetComponents(myColorRef);
NSLog(@"r=%f, g=%f, b=%f, a=%f", colorComponents[0], colorComponents[0], colorComponents[0], colorComponents[1]);
}
else if (CGColorGetNumberOfComponents(myColorRef) == 4) {
const CGFloat * colorComponents = CGColorGetComponents(myColorRef);
NSLog(@"r=%f, g=%f, b=%f, a=%f", colorComponents[0], colorComponents[1], colorComponents[2], colorComponents[3]);
}
else {
NSLog(@"What is this?");
}
请注意,也有不同的colorSpaces。因此,如果您需要此代码而不是记录(例如将RGBA字符串保存到json),您还必须检查(并可能转换)colorSpace。