好的,所以我正在尝试画一个虚线框,它被细分为我要放置内容的部分。这是我的代码:
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];
这包含在我的自定义视图的drawRect方法中,因此dirtyRect是一个等同于视图边界的NSRect。变量标题引用了superview中的另一个视图,我将这些视图的位置基于。
以下是此代码实际绘制的屏幕截图(显然除了标签):
正如你所看到的,除非我们处理一个非常不幸的视错觉,我怀疑,包装盒中的分隔物看起来比盒子的轮廓更厚。我已经明确地将路径对象的lineWidth设置为3,所以我不确定为什么会这样。我非常感谢可以提供的任何建议。
答案 0 :(得分:3)
好吧,我认为问题是你的外盒刚刚被它的视图边缘剪掉了。你要求一条宽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;