是否有更快(或更好)的方法从UIColor获取[RGBA]颜色组件?这周围似乎有很多变化(有些在这里,所有基本上与我在这里所做的相似)我只是好奇,如果有一个替代,因为它似乎有点“缺乏”,因为其他一切都是如此完整而深思熟虑。
if([eachKey isEqualToString:@"NSColor"]) {
UIColor *newColor = [attrs valueForKey:eachKey];
//NSLog(@"COLOR: %@", newColor);
CGColorRef colorRef = [newColor CGColor];
//NSLog(@"%@", colorRef);
int numComponets = CGColorGetNumberOfComponents(colorRef);
if(numComponets == 4) {
const CGFloat *components = CGColorGetComponents(colorRef);
CGFloat compR = components[0];
CGFloat compG = components[1];
CGFloat compB = components[2];
CGFloat compA = components[3];
//NSLog(@"R:%f G:%f B:%f, A:%f", compR, compG, compB, compA);
}
}
我不是在寻找(我认为我有上面的长版本)我想知道这是否是您现在应该这样做的方式?
答案 0 :(得分:16)
CGFloat r, g, b, a;
[MyColor getRed: &r green:&g blue:&b alpha:&a];
需要iOS 5+。
答案 1 :(得分:2)
检查班级参考中的this方法。
答案 2 :(得分:1)
- (BOOL)getRed:(CGFloat *)red
green:(CGFloat *)green
blue:(CGFloat *)blue
alpha:(CGFloat *)alpha
上述方法不可靠,它会为[UIColor whiteColor]
(或其他灰度color
)返回NO。
使用
if(numComponets == 5) {
而不是
if(numComponets == 4) {
The size of the array is one more than the number of components of the color
space for the color.