0

我必须重新设计一些控件。NSButton 没有问题,但是当我按住鼠标并移动旋钮时,NSSlider 出现绘图错误。如果我释放鼠标,它会正确绘制。

NSSlider 同时移动

这是绘图代码(我的类继承自 NSSlider):

- (void)drawRect:(NSRect)dirtyRect
{
    //[super drawRect:dirtyRect];
    CGContextRef c;
    CGFloat y, r, p;

    c = [[NSGraphicsContext currentContext] graphicsPort];
    r = (dirtyRect.size.height*0.8)/2.0;
    p = (dirtyRect.size.width-r*2) * ([self doubleValue]*0.01);
    y = dirtyRect.size.height/2.0;

    CGContextSetLineWidth(c, 2);
    CGContextSetStrokeColorWithColor(c, [_fullLineColor CGColor]);
    CGContextMoveToPoint(c, 0, y);
    CGContextAddLineToPoint(c, dirtyRect.size.width, y);
    CGContextStrokePath(c);

    CGContextSetLineWidth(c, 5);
    CGContextSetStrokeColorWithColor(c, [_valueLineColor CGColor]);
    CGContextMoveToPoint(c, 0, y);
    CGContextAddLineToPoint(c, p, y);
    CGContextStrokePath(c);

    CGContextSetFillColorWithColor(c, [_knobColor CGColor]);
    CGContextFillEllipseInRect(c, CGRectMake(p, y-r, r*2, r*2));
}

我能做些什么来避免这种行为?

4

1 回答 1

2

参数dirtyRect

定义需要重绘的视图部分的矩形。这个矩形通常代表需要更新的视图部分。当启用响应式滚动时,此矩形还可以表示 AppKit 想要缓存的视图的不可见部分。

您正在dirtyRect 中绘制控件。您应该在 self.bounds 中绘制(dirtyRect 部分)控件。在文档中阅读更多信息drawRect:

于 2016-01-24T13:07:15.740 回答