在NSScrollView中使用自定义视图时的工件

时间:2012-02-14 11:02:13

标签: cocoa

我有一个滚动视图,显示了许多自定义视图。

在该自定义视图中,我使用自己的类,因此我可以使用drawRect方法在视图的底部绘制一条线。

@interface MyListItemView : NSView

这是我对drawRect的实现

@implementation MyListItemView

-(void)drawRect:(NSRect)rect
{
    [NSGraphicsContext saveGraphicsState];

    NSBezierPath * path;
    path = [NSBezierPath bezierPath];
    [path moveToPoint: rect.origin];
    [path lineToPoint: NSMakePoint(rect.size.width, 0)];

    [path setLineWidth:1];

    [[NSColor grayColor] set]; 
    [path stroke];

    [NSGraphicsContext restoreGraphicsState];
}

@end

这会按预期绘制线条,但是当我滚动容器时,我会看到出现的文物,如下图所示:

Screen shot of artifact lines on my app

我尝试保存并恢复图形上下文,但这没有任何区别,并且看起来不需要代码。我错过了什么?

1 个答案:

答案 0 :(得分:1)

在散步的时候灵感打击了我。

我在视线的最边缘画了一条线。看起来其中一些是在视图外部绘制的(可能是由于抗锯齿)并且没有得到正确的清理。

我需要做的就是将我的行向上移动半个像素,将我的行代码更改为:

[path moveToPoint: NSMakePoint(0, 0.5)];
[path lineToPoint: NSMakePoint(rect.size.width, 0.5)];