CGColorGetComponents总是返回0 CGColor(黑色)

时间:2015-01-08 02:07:44

标签: ios objective-c cocoa-touch

我想获得UILabel背景的颜色。我正在使用这种方法:

- (UIColor *)colorOfPoint:(CGPoint)point{
   unsigned char pixel[4] = {0};
   CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
   CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, (CGBitmapInfo)kCGImageAlphaPremultipliedLast);

   CGContextTranslateCTM(context, -point.x, -point.y);

   [self.superview.layer renderInContext:context];

   CGContextRelease(context);
   CGColorSpaceRelease(colorSpace);
   UIColor *color = [UIColor colorWithRed:pixel[0]/255.0
                                 green:pixel[1]/255.0
                                  blue:pixel[2]/255.0
                                 alpha:pixel[3]/255.0];

   return color;
}

但是,当我在const CGFloat *componentColors = CGColorGetComponents([self colorOfPoint:self.amountLabel.frame.origin].CGColor);的子视图中调用UITableViewCell时,它总是返回0(也称为黑色)作为背景。怎么可能呢?

1 个答案:

答案 0 :(得分:0)

你在哪里运行这段代码? 在UILabel的子类中? 我不明白为什么你打电话

[self.superView.layer renderInContext: ]

我建议你改成

[myLabel.layer renderInContext: ]

其中myLabel是指向您想要颜色的标签的指针。

顺便说一下,你试过myLabel.backgroundColor吗?

(backgroundColor属性是读/写,即那里有一个getter和一个setter ..)从特定点获取颜色的代码是好的,但对于标签来说似乎有些过分,更好适合图像或其他东西,除非你用渐变或图案图像填充它,这似乎是一种非常昂贵的获取背景颜色的方法..