How do I comfortably use CGColor in an NSArray with CGGradient

▼魔方 西西 提交于 2019-12-20 19:57:11

问题


I have two UIColor instances and want to use them creating a gradient. The code works, but it gives me a warning when I call the arrayWithObject: constructor:

warning: Semantic Issue: Incompatible pointer types sending 'CGColorRef' (aka 'struct CGColor *') to parameter of type 'id'

I suspect there lurks other issues related to the warning (leaks for instance). Here is the snippet:

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

How can I rewrite the code to get rid of this warning in a safe way ?

  • I tried creating a CGArrayRef manually, but that got a bit nasty after a while.
  • CGGradientCreateWithColorComponents works, but I don't like having to manually merge all color components into an CGFloat components[]

回答1:


Try this

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


来源:https://stackoverflow.com/questions/5948237/how-do-i-comfortably-use-cgcolor-in-an-nsarray-with-cggradient

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!