【问题标题】:How do I comfortably use CGColor in an NSArray with CGGradient如何在带有 CGGradient 的 NSArray 中舒适地使用 CGColor
【发布时间】:2011-08-22 08:06:57
【问题描述】:

我有两个 UIColor 实例,想用它们创建一个渐变。该代码有效,但是当我调用 arrayWithObject: 构造函数时它给了我一个警告:

警告:语义问题:不兼容 发送“CGColorRef”的指针类型 (又名'struct CGColor *')参数 'id'类型的

我怀疑还有其他与警告相关的问题(例如泄漏)。这是sn-p:

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

如何重写代码以安全地消除此警告?

  • 我尝试手动创建一个 CGArrayRef,但一段时间后它变得有点讨厌。
  • CGGradientCreateWithColorComponents 有效,但我不喜欢手动将所有颜色组件合并到 CGFloat components[]

【问题讨论】:

  • 你可以使用CAGradientLayer *gradient = [CAGradientLayer layer]; gradient.frame = view.bounds; gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
  • @7KV7,我不这么认为。我在 drawRect 中使用它来创建我的填充形状(顺便说一句,这是一个非矩形多边形)。
  • 还有 UIColor *startColor, endColor;应该是 UIColor *startColor, *endColor;
  • 我已经用我的答案中的代码删除了警告。看看它是否有效。

标签: iphone ios nsarray uicolor


【解决方案1】:

试试这个

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多