我正在寻找如何在iOS中使用Core Graphics(CGContext
)绘制空心圆的方法。我尝试使用代码来完成它:
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(ctx, 8.0);
CGContextSetStrokeColor(ctx, CGColorGetComponents([[UIColor redColor] CGColor]));
CGContextSetFillColor(ctx, CGColorGetComponents([[UIColor blueColor] CGColor]));
CGContextFillEllipseInRect(ctx, rect);
CGContextFillPath(ctx);
}
但它画出了圆圈。 由于此问题已在此处讨论过,但其他示例(例如this)仅为我提供了圆圈。
答案 0 :(得分:5)
如果你想在rect中绘制一个圆,使用Stroke方法和参数中的rect,你将在rect之外绘制一部分cercle。
假设您知道要绘制的圆的宽度,则有两个选择。
首先,你可以划线,但你必须用较小的矩形绘制它:
-(void)drawRect:(CGRect)rect {
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGFloat innerWidth = 8;
[[UIColor redColor] setStroke];
CGContextSetLineWidth(ctx, innerWidth);
// We add an ellipsis shifted by half the inner Width
CGContextAddEllipseInRect(ctx, CGRectInset(rect, innerWidth, innerWidth));
// Stroke the path
CGContextStrokePath(ctx);
}
您还可以使用奇偶规则(Apple docs)
填充圆圈-(void)drawRect:(CGRect)rect {
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGFloat innerWidth = 8;
[[UIColor redColor] setStroke];
// Add the outer circle
CGContextAddEllipseInRect(ctx, rect);
// Add the inner circle
CGContextAddEllipseInRect(ctx, CGRectInset(rect, innerWidth, innerWidth));
// Fill the path using the EO rule
CGContextEOFillPath(ctx);
}
答案 1 :(得分:3)
如果您只想要圆形轮廓,请不要填充它。
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(ctx, 8.0);
[[UIColor redColor] set];
CGContextStrokeEllipseInRect(ctx, rect);
}
答案 2 :(得分:2)
使用CGContextStrokeEllipseInRect
代替CGContextFillEllipseInRect
。由于您尚未在当前上下文中构建路径,因此请删除CGContextFillPath
。
答案 3 :(得分:2)
你可以做的一种方法是绘制一个实心圆,然后用CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeClear)
在您的代码添加类似
之后CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(ctx, 5.0);
CGContextSetBlendMode(ctx,kCGBlendModeClear)
CGContextSetFillColor(ctx, CGColorGetComponents([[UIColor blueColor] CGColor]));
CGContextFillEllipseInRect(ctx, rect);
CGContextFillPath(ctx);
UIGraphicsEndImageContext();
我在绘图应用程序中使用CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeClear)
,这可能是更好用的。抚摸这条路可能对你有用。