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

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];
.

这包含在我的自定义视图的绘制方法中,因此DirtyRect是等效视图界限的NSRect。变量标题是指监视中的另一个视图,我基于所关闭的线路的位置。

这是本代码实际绘制的屏幕截图(显然标签除外):

您可以看到,除非我们处理非常不幸的光学幻觉,我怀疑,盒子中包含的分隔符似乎比盒子的轮廓厚。我明确地将路径对象的阵容设置为三个,所以我不确定为什么。我会非常感谢任何可以提供的建议。

有帮助吗?

解决方案

好的,我认为问题是你的外部盒子只是被视图的边缘剪裁。您要求一行为3个宽度,因此如果您的dirtyRect是视图的实际界限,则封闭框的1.5点将在视图之外,因此您只需看到1.5分边缘线。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top