Как мне удобно использовать CGColor в NSArray с CGGradient - PullRequest
9 голосов
/ 10 мая 2011

У меня есть два экземпляра 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 Ответ

24 голосов
/ 10 мая 2011

Попробуйте это

UIColor *startColor, *endColor; 
   // ...
   NSArray *colors = [NSArray arrayWithObjects:
                      (id)startColor.CGColor, (id)endColor.CGColor, nil];
   CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, 
                     (CFArrayRef) colors, NULL);
...