Задавате цвета на запълване по ненужно индиректен начин. Направете това вместо това:
CGContextAddArc(c, self.bounds.size.width/2, self.bounds.size.height/2, 100, 0, M_PI * 2, true);
CGContextSetFillColorWithColor(c, [[UIColor blueColor] CGColor]);
CGContextFillPath(c);
CGContextAddArc(c, self.bounds.size.width/2, self.bounds.size.height/2, 90, 0, M_PI * 2, true);
CGContextSetFillColorWithColor(c, [[UIColor whiteColor] CGColor]);
CGContextFillPath(c);
Или, още по-добре, просто използвайте директно методите за рисуване на UIKit:
[[UIColor blueColor] setFill];
[[UIBezierPath bezierPathWithArcCenter:CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2) radius:100 startAngle:0 endAngle:M_PI * 2 clockwise:YES] fill];
[[UIColor whiteColor] setFill];
[[UIBezierPath bezierPathWithArcCenter:CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2) radius:90 startAngle:0 endAngle:M_PI * 2 clockwise:YES] fill];
Вашият код е неуспешен, защото [[UIColor whiteColor] CGColor]
връща цвят в "сивото" цветово пространство, което има само два компонента, "сива" стойност (0 за черно, 1 за бяло) и алфа стойност. В този случай контекстът е RGBA, така че CGContextSetFillColor
очаква да види 4 компонента, три за RGB и един за алфа.
The документацията за CGContextSetFillColor
посочва:
Имайте предвид, че предпочитаният API за използване сега е CGContextSetFillColorWithColor.
person
Kurt Revis
schedule
15.08.2013