gpt4 book ai didi

ios - 在核心图形中绘制圆角矩形

转载 作者:可可西里 更新时间:2023-11-01 05:23:57 25 4
gpt4 key购买 nike

我想复制默认 iPad 日历的事件标记,如下所示:

enter image description here我正在尝试为此使用 coregraphics,绘制一条圆角矩形的路径。这是我能想到的结果:

enter image description here

如您所见,iPad 版本的圆角看起来更平滑。我尝试使用更大的线宽,看起来像这样: enter image description here

我的代码如下所示(从该网站获取):

UIColor* fillColor= [self.color colorByMultiplyingByRed:1 green:1 blue:1 alpha:0.2];

CGContextSetLineWidth(ctx, 1.0);
CGContextSetStrokeColorWithColor(ctx, self.color.CGColor);
CGContextSetFillColorWithColor(ctx, fillColor.CGColor);

CGRect rrect = self.bounds;

CGFloat radius = 30.0;
CGFloat width = CGRectGetWidth(rrect);
CGFloat height = CGRectGetHeight(rrect);

if (radius > width/2.0)
radius = width/2.0;

if (radius > height/2.0)
radius = height/2.0;

CGFloat minx = CGRectGetMinX(rrect);
CGFloat midx = CGRectGetMidX(rrect);
CGFloat maxx = CGRectGetMaxX(rrect);
CGFloat miny = CGRectGetMinY(rrect);
CGFloat midy = CGRectGetMidY(rrect);
CGFloat maxy = CGRectGetMaxY(rrect);
CGContextMoveToPoint(ctx, minx, midy);
CGContextAddArcToPoint(ctx, minx, miny, midx, miny, radius);
CGContextAddArcToPoint(ctx, maxx, miny, maxx, midy, radius);

CGContextAddArcToPoint(ctx, maxx, maxy, midx, maxy, radius);
CGContextAddArcToPoint(ctx, minx, maxy, minx, midy, radius);
CGContextClosePath(ctx);
CGContextDrawPath(ctx, kCGPathFillStroke);

// draw circle on left side

CGRect target= CGRectMake(rect.origin.x + 4.0,
rect.origin.y + 3.0,
7.0, 7.0);

CGContextSetFillColorWithColor(ctx, self.color.CGColor);
CGContextSetAlpha(ctx, 0.4);
CGContextFillEllipseInRect(ctx, target);

CGContextSetAlpha(ctx, 0.9);
CGContextSetStrokeColorWithColor(ctx, self.color.CGColor);
CGContextStrokeEllipseInRect(ctx, target);

任何人都可以帮助我使结果更接近原始结果吗?我应该使用不同的技术来绘制圆角矩形,还是可以更改任何参数以使其看起来更平滑?我已经尝试使用 UIBezierPath,但它看起来基本上是一样的。有什么建议吗?

[编辑] 基于CGRectInset 的解决方案如下所示:

enter image description here

最佳答案

您的问题是笔划应用在路径的中心,并且一半被裁剪/遮盖到您的 View 边界,因为它绘制在您的 View 之外。如果你在每个方向上插入一个点,你就会得到你想要的结果。如果增加笔画的宽度,则需要进一步插入绘图(笔画宽度的一半(即 4 磅宽的笔画应插入 2 磅)。

这可以很容易地通过更改来修复

CGRect rrect = self.bounds;

进入

// Inset x and y by half the stroke width (1 point for 2 point stroke) 
CGRect rrect = CGRectInset(self.bounds, 1, 1);

关于ios - 在核心图形中绘制圆角矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10557157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com