内存错误使用CAGradientLayer

问题描述:

当我使用CAGradientLayer创建一个背景层,:Gradients on UIView and UILabels On iPhone内存错误使用CAGradientLayer

然而,当我使用此代码我得到一个EXC_BAD_ACCESS错误一起CGColorSpaceGetModel参考。

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]; 

任何想法可能会导致此错误?

您需要使用CGColorRefsUIColor ...有上UIColor一个属性来获取CGColorRef ....

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

屁股正确海盗指出你需要转换为(ID)。 – 2011-12-21 10:46:45

+3

我希望你的意思是“作为维京人......”;) – vikingosegundo 2011-12-21 10:55:12

+0

也许;)hahaha – 2011-12-21 11:35:47

gradient.colors需要被CGColor,不UIColor

尝试

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

使用CGColor代替的UIColor:

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