UICOLOR и графический контекст
-
14-11-2019 - |
Вопрос
У меня есть пользовательский 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 компонентами, потому что ему не нужен другой.(Это сделано возможным с механизмом кластеризации класса).
Это, возможно, почему ваш код показывает некоторые различия между этим двумя цветами.