使用CAGradientLayer时的内存错误

时间:2011-12-21 10:24:28

标签: objective-c ios memory-management quartz-graphics

我正在使用CAGradientLayer创建背景图层,如此问题的答案中所述:Gradients on UIView and UILabels On iPhone

然而,当我使用这段代码时,我得到一个引用CGColorSpaceGetModel的exc_bad_access错误。

UILabel *headerText = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width -10, 18)];    

CAGradientLayer *gradient = [CAGradientLayer layer];

gradient.bounds = headerText.bounds;

UIColor *topColor = [[UIColor alloc] initWithRed:0.5647 green:0.6235 blue:0.6667 alpha:1.0];

UIColor *bottomColor = [[UIColor alloc] initWithRed:0.7216 green:0.7569 blue:0.7843 alpha:1.0];

NSArray *gradientColors = [[NSArray alloc] initWithObjects:topColor, bottomColor, nil];

gradient.colors = gradientColors;

[headerText.layer insertSublayer:gradient atIndex:0];

知道可能导致此错误的原因是什么?

3 个答案:

答案 0 :(得分:6)

您需要使用CGColorRefs而不是UIColor ... UIColor上有一个属性来获取CGColorRef ....

NSArray *gradientColors = [[NSArray alloc] initWithObjects:(id)topColor.CGColor, (id)bottomColor.CGColor, nil];

答案 1 :(得分:1)

gradient.colors需要CGColor,而不是UIColor

NSArray *gradientColors = [[NSArray alloc] initWithObjects:(id)topColor.CGColor, (id)bottomColor.CGColor, nil];

答案 2 :(得分:0)

使用CGColor代替UIColor:

    NSArray *gradientColors = [[NSArray alloc] initWithObjects:topColor.CGColor, 
bottomColor.CGColor, nil];