gpt4 book ai didi

iphone - CoreGraphics 线似乎改变了大小?

转载 作者:行者123 更新时间:2023-11-29 05:57:04 25 4
gpt4 key购买 nike

我的形状周围有这条线:

enter image description here

问题是,它的厚度显然从 1px 变成了 2px。这是我正在使用的代码:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, rect);

CGContextSetFillColorWithColor(context, [BUTTON_COLOR CGColor]);
CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);
CGContextSetLineWidth(context, 1);

int radius = 8;


CGContextMoveToPoint(context, 0, self.frame.size.height / 2);

CGContextAddLineToPoint(context, POINT_WIDTH, self.frame.size.height);

CGContextAddLineToPoint(context, rect.origin.x + rect.size.width - radius,
rect.origin.y + rect.size.height);

CGContextAddArc(context, rect.origin.x + rect.size.width - radius,
rect.origin.y + rect.size.height - radius, radius, M_PI / 2, 0.0f, 1);

CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y + radius);

CGContextAddArc(context, rect.origin.x + rect.size.width - radius, rect.origin.y + radius,
radius, 0.0f, -M_PI / 2, 1);

CGContextAddLineToPoint(context, POINT_WIDTH, 0);

CGContextAddLineToPoint(context, 0, self.frame.size.height / 2);

CGContextClosePath(context);
CGContextDrawPath(context, kCGPathFillStroke);

有什么想法吗?

最佳答案

您的顶部、底部和右边缘看起来比对角线细的原因是因为您砍掉了沿这些边缘绘制的一半线条。正如 Costique 提到的,Core Graphics 绘制笔划,使其在路径上居中。这意味着一半的笔画位于路径的一侧,一半的笔画位于路径的另一侧。由于您的路径完全沿着 View 的顶部、右侧和底部边缘延伸,因此一半笔划落在 View 的边界之外,因此不会被绘制。

Costique 也是正确的,您应该将路径移动 0.5 点。 (从技术上讲,您应该移动笔划宽度的一半。)但是,您没有根据 rect 变量统一指定坐标,因此移动所有路径很困难。

您想要做的是在两个维度上将 rect 插入 0.5,调整图形上下文,使其原点位于 rect.origin,并仅使用 rect.size 来获取坐标 - 而不是 self.frame.size。这是我的测试:

- (void)drawRect:(CGRect)dirtyRect
{
CGContextRef gc = UIGraphicsGetCurrentContext();
CGContextSaveGState(gc); {

CGContextSetFillColorWithColor(gc, [UIColor colorWithWhite:.9 alpha:1].CGColor);
CGContextSetStrokeColorWithColor(gc, [[UIColor blackColor] CGColor]);
CGContextSetLineWidth(gc, 1);

static const CGFloat Radius = 8;
static const CGFloat PointWidth = 20;

CGRect rect = CGRectInset(self.bounds, .5, .5);
CGContextTranslateCTM(gc, rect.origin.x, rect.origin.x);
rect.origin = CGPointZero;

CGContextMoveToPoint(gc, 0, rect.size.height / 2);

CGContextAddLineToPoint(gc, PointWidth, rect.size.height);

CGContextAddLineToPoint(gc, rect.origin.x + rect.size.width - Radius,
rect.origin.y + rect.size.height);

CGContextAddArc(gc, rect.origin.x + rect.size.width - Radius,
rect.origin.y + rect.size.height - Radius, Radius, M_PI / 2, 0.0f, 1);

CGContextAddLineToPoint(gc, rect.origin.x + rect.size.width, rect.origin.y + Radius);

CGContextAddArc(gc, rect.origin.x + rect.size.width - Radius, rect.origin.y + Radius,
Radius, 0.0f, -M_PI / 2, 1);

CGContextAddLineToPoint(gc, PointWidth, 0);

CGContextAddLineToPoint(gc, 0, rect.size.height / 2);

CGContextClosePath(gc);
CGContextDrawPath(gc, kCGPathFillStroke);

} CGContextRestoreGState(gc);
}

结果如下:

enter image description here

关于iphone - CoreGraphics 线似乎改变了大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55055442/

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