Как мне удобно использовать CGColor в NSArray с CGGradient
У меня есть два экземпляра UIColor и я хочу использовать их для создания градиента. Код работает, но он дает мне предупреждение, когда я звоню arrayWithObject:
конструктор:
предупреждение: семантическая проблема: несовместимые типы указателей, отправляющие "CGColorRef" (он же "struct CGColor *") параметру типа "id"
Я подозреваю, что там скрываются другие проблемы, связанные с предупреждением (например, утечки). Вот фрагмент:
UIColor *startColor, *endColor;
// ...
NSArray *colors = [NSArray arrayWithObjects:
startColor.CGColor, endColor.CGColor, nil];
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace,
(CFArrayRef) colors, NULL);
Как я могу переписать код, чтобы избавиться от этого предупреждения безопасным способом?
- Я попытался создать CGArrayRef вручную, но через некоторое время это стало немного неприятным.
- CGGradientCreateWithColorComponents работает, но мне не нравится вручную объединять все цветовые компоненты в
CGFloat components[]
1 ответ
Решение
Попробуй это
UIColor *startColor, *endColor;
// ...
NSArray *colors = [NSArray arrayWithObjects:
(id)startColor.CGColor, (id)endColor.CGColor, nil];
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace,
(CFArrayRef) colors, NULL);