Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSBezierPath对象似乎正在绘制可变线宽_Objective C_Cocoa_Drawing_Nsbezierpath_Thickness - Fatal编程技术网

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

Objective c NSBezierPath对象似乎正在绘制可变线宽,objective-c,cocoa,drawing,nsbezierpath,thickness,Objective C,Cocoa,Drawing,Nsbezierpath,Thickness,好的,我试着画一个虚线框,它被细分为我要放置内容的部分。这是我的密码: 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; CG

好的,我试着画一个虚线框,它被细分为我要放置内容的部分。这是我的密码:

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];
NSBezierPath*path=[NSBezierPath-bezierpath-withrect:dirtyRect];
[路径设置线宽:3];
CGFloat模式[2]={5,5};
[path setLineDash:模式计数:2阶段:0];
CGFloat TOTALLHEIGHT=标题.frame.origin.y-10;
CGFloat sectionOffset=0;
如果([game getNumPlayers]==2){
截面偏移=总高度/2;
}else if([game getNumPlayers]==3){
截面偏移=总高度/3;
}else if([game getNumPlayers]==4){
截面偏移=总高度/4;
}
对于(int i=0;i<[game getPlayers]count];i++){
[路径移动点:NSMakePoint(0,总高度-(截面偏移*i));
[路径lineToPoint:NSMakePoint(dirtyRect.size.width,totalHeight-(sectionOffset*i));
}
[路径笔划];
这包含在自定义视图的drawRect方法中,因此dirtyRect是与视图边界等效的NSRect。变量头引用了superview中的另一个视图,我基于它的线的位置

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


正如你所看到的,除非我们处理的是一个非常不幸的光学错觉,我对此表示怀疑,否则盒子里的分隔物看起来比盒子的轮廓要厚。我已经明确地将path对象的线宽设置为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;

好的,我认为问题是你的外盒只是被它的视图边缘剪掉了。您需要一条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;

好的,我认为问题是你的外盒只是被它的视图边缘剪掉了。您需要一条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;

好的,我认为问题是你的外盒只是被它的视图边缘剪掉了。您需要一条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;

完美的我自己从来没有想到过,但是当你想到它的时候,它是非常有意义的。视野之外的东西被剪掉了,从线的边缘画出来没有任何意义。太好了!我自己从来没有想到过,但是当你想到它的时候,它是非常有意义的。视野之外的东西被剪掉了,从线的边缘画出来没有任何意义。太好了!我自己从来没有想到过,但是当你想到它的时候,它是非常有意义的。视野之外的东西被剪掉了,从线的边缘画出来没有任何意义。太好了!我自己从来没有想到过,但是当你想到它的时候,它是非常有意义的。视图之外的内容被剪裁,从线的边缘绘制没有任何意义。