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视图中的粗笔划留出空间.
我写了这个,这样你就可以轻松画出很多圈子了.
将以下代码添加到.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)
有一种绘制填充圆的简单方法
CGContextFillEllipseInRect(context, CGRectMake(x,y,width,height))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39444 次 |
| 最近记录: |