自定义视图有时会出现错误的背景颜色

时间:2014-12-31 21:58:50

标签: ios iphone core-graphics

我有一个自定义的“点”视图,它是一个带有边框和背景颜色的圆圈,类似于iOS 7+左上角显示信号强度的点。

点可以填充也可以不填充。

填充点:

Filled Dot

未填充点:

Not Filled Dot

问题:我发布应用程序的时间占20%-30%,非填充点显示为黄色背景,即使明确指定了白色。

Unexpected yellow dots

以下是drawRect中的代码:

- (void)drawRect:(CGRect)rect
{
    CGRect borderRect = CGRectInset(rect, 3, 3);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    if (self.filled) {
        CGContextSetFillColor(ctx, CGColorGetComponents([self.color CGColor]));
    } else {
        CGContextSetFillColor(ctx, CGColorGetComponents([[UIColor whiteColor] CGColor]));
    }
    CGContextSetStrokeColor(ctx, CGColorGetComponents([self.color CGColor]));
    CGFloat lineWidth = rect.size.height/10;
    if (lineWidth < 1) {
        lineWidth = 1.0;
    }
    CGContextSetLineWidth(ctx, lineWidth);
    CGContextFillEllipseInRect(ctx, borderRect);
    CGContextStrokeEllipseInRect(ctx, borderRect);
    CGContextFillPath(ctx);
}

self.color永远不会被设置为黄色。只有你看到的蓝色边框。

什么可能导致这些有时会出现黄色?

1 个答案:

答案 0 :(得分:1)

我认为这可能与此帖中提到的问题有关:Is there an issue with CGColorGetComponents?。当我替换这一行时,

 CGContextSetFillColor(ctx, (CGFloat []){ 1, 1, 1, 1 });

对于您使用的那个,

CGContextSetFillColor(ctx, CGColorGetComponents([[UIColor whiteColor] CGColor]));

我没有看到任何偶然的黄色(我大多看到黑色,我运行你的代码时偶尔会出现黄色或白色)。