Я рисую простой обведенный круг, используя следующий класс:
@implementation StrokedCircle
- (id)initWithRadius:(CGFloat)radius strokeWidth:(CGFloat)strokeWidth strokeColor:(UIColor *)strokeColor
{
self = [super initWithRadius:radius];
if (self)
{
_strokeWidth = strokeWidth;
_strokeColor = strokeColor;
}
return self;
}
- (void)drawRect:(CGRect)rect
{
NSLog(@"Drawing with color %@ and stroke width %f", self.strokeColor, self.strokeWidth);
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect circleRect = CGRectInset(rect, self.strokeWidth, self.strokeWidth);
CGContextAddEllipseInRect(context, circleRect);
CGContextSetLineWidth(context, self.strokeWidth);
CGContextSetStrokeColor(context, CGColorGetComponents([self.strokeColor CGColor]));
CGContextStrokePath(context);
}
@end
Примечание: суперкласс представляет собой простой круг (подкласс UIView
) с установленным свойством radius
и где фоновый цвет представления установлен на clearColor
.
В контроллере представления я добавляю следующий код в viewDidLoad
:
- (void)viewDidLoad
{
[super viewDidLoad];
StrokedCircle *strokedCircle = [[StrokedCircle alloc] initWithRadius:50.0 strokeWidth:1.0 strokeColor:[UIColor blueColor]];
strokedCircle.center = self.view.center;
[self.view addSubview:strokedCircle];
}
Это на самом деле работает нормально, консоль выводит: 2014-06-14 10:31:58.270 ShapeTester[1445:60b] Drawing with color UIDeviceRGBColorSpace 0 0 1 1 and stroke width 1.000000
и синий кружок отображается в середине экрана.
Однако, когда я изменяю цвет на [UIUColor blackColor]
, [UIColor grayColor]
или [UIColor whiteColor]
(а затем также изменяю вид backgroundColor
), круг больше не отображается.
Кто-нибудь знает, в чем причина такого поведения? Разве основная графика не рисует оттенки серого? Я прочитал соответствующий раздел в Руководство по программированию базовой графики, но ничего подобного там не упоминалось.