Вопрос

У меня есть пользовательский UIVIEW, который рисует путь, как так

- (void)drawRect:(CGRect)rect{

    [[UIColor blackColor] setStroke];
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetFillColor(ctx, CGColorGetComponents(self.color));

    CGContextFillPath(ctx);

    UIBezierPath *thePath = [UIBezierPath bezierPath];
    thePath.lineWidth = _lineWidth;

    _center = CGPointMake(rect.size.width, rect.size.height);

    [thePath moveToPoint:_center];

    [thePath addArcWithCenter:_center radius:rect.size.width startAngle:M_PI endAngle:M_PI+degreesToRadians(_angle)clockwise:YES];

    [thePath closePath];
    [thePath fill];

}
.

Мой пользовательский UIVIEW также имеет способ изменить цвет наполнения

- (void) changeColor:(UIColor *) newColor {

    self.color = [newColor CGColor];
    [self setNeedsDisplay];

}
.

Если я позвоню в ChangeColor: метод с любым из предопределенных цветов, таких как

 [UIColor redColor]  
.

Все работает нормально.Вместо этого, если я попытаюсь дать ему пользовательский цвет, такой как

 UIColor* color = [UIColor colorWithRed:1.0f green:0.0f blue:0.0f alpha:1.0f];
.

Цвет моего пользовательского мерцания UIView между белым, красным и синим случайным.

Любые идеи почему?

заранее спасибо!

Это было полезно?

Решение

попробуйте:

CGContextSetFillColorWithColor(ctx, self.color.CGColor);
.

вместо:

CGContextSetFillColor(ctx, CGColorGetComponents(self.color));
.

Другие советы

Когда вы используете этот метод Вызов:

[UIColor redColor];
.

Для целей оптимизации UICOLOR возвращает объект только с 2 компонентами, потому что ему не нужен другой.(Это сделано возможным с механизмом кластеризации класса).

Это, возможно, почему ваш код показывает некоторые различия между этим двумя цветами.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top