【发布时间】: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