Ошибки памяти при использовании CAGradientLayer - PullRequest
0 голосов
/ 21 декабря 2011

Я использую CAGradientLayer для создания фонового слоя, как описано в этом ответе на этот вопрос: Градиенты на UIView и UILabels на iPhone

Однако, когда я использую этот код, я получаюОшибка 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];

Есть идеи, что может быть причиной этой ошибки?

Ответы [ 3 ]

6 голосов
/ 21 декабря 2011

Вам нужно использовать CGColorRefs, а не UIColor ... есть свойство на UIColor, чтобы получить CGColorRef ....

NSArray *gradientColors = [[NSArray alloc] initWithObjects:(id)topColor.CGColor, (id)bottomColor.CGColor, nil];
1 голос
/ 21 декабря 2011

gradient.colors должно быть CGColor, а не UIColor.

попробовать

NSArray *gradientColors = [[NSArray alloc] initWithObjects:(id)topColor.CGColor, (id)bottomColor.CGColor, nil];
0 голосов
/ 21 декабря 2011

Используйте CGColor вместо UIColor:

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