gpt4 book ai didi

objective-c - NSBezierPath 对象似乎正在绘制可变线宽

转载 作者:行者123 更新时间:2023-12-03 17:34:01 33 4
gpt4 key购买 nike

好的,所以我尝试绘制一个虚线框,该虚线框被分割为我要放置内容的部分。这是我的代码:

NSBezierPath *path = [NSBezierPath bezierPathWithRect:dirtyRect];
[path setLineWidth:3];
CGFloat pattern[2] = {5, 5};
[path setLineDash:pattern count:2 phase:0];
CGFloat totalHeight = header.frame.origin.y - 10;
CGFloat sectionOffset = 0;
if([game getNumPlayers] == 2) {
sectionOffset = totalHeight / 2;
} else if([game getNumPlayers] == 3) {
sectionOffset = totalHeight / 3;
} else if([game getNumPlayers] == 4) {
sectionOffset = totalHeight / 4;
}
for(int i = 0; i < [[game getPlayers] count]; i++) {
[path moveToPoint:NSMakePoint(0, totalHeight - (sectionOffset * i))];
[path lineToPoint:NSMakePoint(dirtyRect.size.width, totalHeight - (sectionOffset * i))];
}
[path stroke];

这包含在我的自定义 View 的drawRect方法中,因此dirtyRect是一个相当于 View 边界的NSRect。变量 header 引用 super View 中的另一个 View ,我将其作为线条位置的基础。

这是这段代码实际绘制的屏幕截图(明显除了标签):

正如您所看到的,除非我们正在处理非常不幸的视错觉(我对此表示怀疑),否则盒子中包含的分隔物似乎比盒子的轮廓更厚。我已明确将路径对象的 lineWidth 设置为 3,所以我不确定这是为什么。我将非常感谢您提供的任何建议。

最佳答案

好吧,我认为问题是你的外框刚刚被其 View 的边缘剪掉了。您要求一条 3 点宽的线,因此如果您的 dirtyRect 是 View 的实际边界,则封闭框的 1.5 点将位于 View 之外,因此您只会看到 1.5 个点的边缘线。

内线显示完整的 3 点厚度。

您可以通过执行以下操作来解决此问题:

const CGFloat lineWidth = 3;
NSBezierPath *const path = [NSBezierPath bezierPathWithRect:NSInsetRect(dirtyRect, lineWidth/2, lineWidth/2)];
path.lineWidth = lineWidth;

关于objective-c - NSBezierPath 对象似乎正在绘制可变线宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22031084/

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