您正在以不必要的间接方式设置填充颜色。改为这样做:
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 代表白色)和一个 alpha 值。在这种情况下,上下文是 RGBA,因此CGContextSetFillColor
预计会看到 4 个分量,三个用于 RGB,一个用于 alpha。
的文档CGContextSetFillColor
指出:
请注意,现在首选的 API 是 CGContextSetFillColorWithColor。