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

Cocoa 在NSScrollView中使用自定义视图时的工件,cocoa,Cocoa,我有一个滚动视图,显示了许多自定义视图 在该自定义视图中,我使用自己的类,因此可以使用drawRect方法在视图底部绘制一条线 @interface MyListItemView : NSView 下面是我对drawRect的实现 @implementation MyListItemView -(void)drawRect:(NSRect)rect { [NSGraphicsContext saveGraphicsState]; NSBezierPath * path;

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

在该自定义视图中,我使用自己的类,因此可以使用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
这将按预期绘制线条,但当我滚动容器时,会出现瑕疵,如下图右侧所示:


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

我在散步时受到了灵感的冲击

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

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

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

我在散步时灵感涌上心头

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

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

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