2014-12-31 3 views
0

У меня есть пользовательский вид «Dot», который представляет собой круг с цветом границы и фона, похожий на точки в верхнем левом углу 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

Я думаю, что это может иметь отношение к проблеме, упомянутой в этом сообщении: Is there an issue with CGColorGetComponents?. Когда я заменял эту линию,

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

для того, который вы использовали,

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

я не видел случайный желтый цвет (я в основном видел черный, иногда с желтым или белым цветом, когда я побежал ваш код).

Смежные вопросы