CGGradientCreateWithColors возвращает нулевой указатель - PullRequest
6 голосов
/ 27 ноября 2010

Проблема описана в subj .; Вот мой код ниже:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor blueColor], nil];
CGGradientRef gradient = CGGradientCreateWithColors(NULL, (CFArrayRef)colors, NULL);

Это не работает . На самом деле последний вызов возвращает nil;

Также не работает, когда я заменяю первый аргумент NULL ссылкой CGColorSpace, например Устройство RGB.

Что не так, у кого-нибудь есть идея?

Ответы [ 3 ]

17 голосов
/ 27 ноября 2010

Вам необходимо получить доступ к CGColor касту от UIColor:

NSArray *colors = [NSArray arrayWithObjects:(id)[UIColor redColor].CGColor, (id)[UIColor blueColor].CGColor, nil];

Также рекомендуется указать цветовое пространство:

CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColors(space, (CFArrayRef)colors, NULL);
3 голосов
/ 27 ноября 2010

CGGradientCreateWithColors() ожидает массив CGColorRef с, а не UIColor с. AFAIK UIColor не является бесплатным по мосту с CGColorRef.

2 голосов
/ 30 марта 2011
CGFloat locations[2];
locations[0] = 0.0;
locations[1] = 1.0;

CGGradientRef gradient = CGGradientCreateWithColors(space, (CFArrayRef)colors, locations);
...