iOS绘制填充圆圈

Reg*_*ion 34 cgcontext drawrect ios

这里不是图形程序员,所以我试图绊倒这个.我正在尝试绘制9个实心圆圈,每个圆圈都有不同的颜色,每个圆圈都有一个白色边框.UIView的框架是CGRectMake(0,0,60,60).见附图.

问题是我在每边的边界上都有"扁平斑点".以下是我的代码(来自UIView子类):

- (void)drawRect:(CGRect)rect
{
    CGRect borderRect = CGRectMake(0.0, 0.0, 60.0, 60.0);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
    CGContextSetRGBFillColor(context, colorRed, colorGreen, colorBlue, 1.0);
    CGContextSetLineWidth(context, 2.0);
    CGContextFillEllipseInRect (context, borderRect);
    CGContextStrokeEllipseInRect(context, borderRect);
    CGContextFillPath(context);
}
Run Code Online (Sandbox Code Playgroud)

如果我在drawRect中更改为CGRectMake(0,0,56,56),我只会在顶部和左侧看到平点,并且底部和右侧看起来很好.

任何人都可以建议我如何解决这个问题?在我看来,UIView正在修剪边界,但对此并不了解,我真的不知道如何修复它.

在此之前,感谢任何图形专家的建议.

在此输入图像描述

Wai*_*ain 38

我喜欢@AaronGolden的答案,只想添加:

CGRect borderRect = CGRectInset(rect, 2, 2);
Run Code Online (Sandbox Code Playgroud)

或更好:

CGFloat lineWidth = 2;
CGRect borderRect = CGRectInset(rect, lineWidth * 0.5, lineWidth * 0.5);
Run Code Online (Sandbox Code Playgroud)


Aar*_*den 17

这些圆圈只是被剪裁到绘制它们的视图的边界.视图必须略大于要绘制的圆.您可以想象CGContextStrokeEllipseInRect调用跟踪半径为30的圆,然后在跟踪曲线的每一边绘制一个像素.在远处边缘,您将在视图边界之外有一个像素.

尝试将您的视图设置为62x62,或使圆半径略小,以便为60x60视图中的粗笔划留出空间.


Tri*_*non 7

我写了这个,这样你就可以轻松画出很多圈子了.

将以下代码添加到.m文件中:

- (void) circleFilledWithOutline:(UIView*)circleView fillColor:(UIColor*)fillColor outlineColor:(UIColor*)outlinecolor{
CAShapeLayer *circleLayer = [CAShapeLayer layer];
float width = circleView.frame.size.width;
float height = circleView.frame.size.height;
[circleLayer setBounds:CGRectMake(2.0f, 2.0f, width-2.0f, height-2.0f)];
[circleLayer setPosition:CGPointMake(width/2, height/2)];
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(2.0f, 2.0f, width-2.0f, height-2.0f)];
[circleLayer setPath:[path CGPath]];
[circleLayer setFillColor:fillColor.CGColor];
[circleLayer setStrokeColor:outlinecolor.CGColor];
[circleLayer setLineWidth:2.0f];
[[circleView layer] addSublayer:circleLayer];
}
Run Code Online (Sandbox Code Playgroud)

然后将以下代码添加到视图中,加载并将"yourView"替换为您要放置圆圈的任何视图.如果您想制作一堆圆圈,只需在页面中添加一些小视图,然后重复下面的代码.圆圈将变为您所观看的视图的大小.

[self circleFilledWithOutline:self.yourView fillColor:[UIColor redColor] outlineColor:[UIColor purpleColor]];
Run Code Online (Sandbox Code Playgroud)


王怡飞*_*王怡飞 6

有一种绘制填充圆的简单方法

CGContextFillEllipseInRect(context, CGRectMake(x,y,width,height))
Run Code Online (Sandbox Code Playgroud)