Как мне удобно использовать 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);
Другие вопросы по тегам