Рисувам обикновен кръг с щрихи, използвайки следния клас:
@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
на изгледа), вече не се показва кръг.
Някой знае ли каква е причината за това поведение? Основната графика не рисува ли цветове в сивата скала? Прочетох съответния раздел в Ръководство за програмиране на основна графика, но нищо подобно не беше споменато там.