Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 使用CoreGraphics在我的自定义NSSlider中绘制错误的Cocoa图形_Objective C_Cocoa_Core Graphics_Custom Controls_Nsslider - Fatal编程技术网

Objective c 使用CoreGraphics在我的自定义NSSlider中绘制错误的Cocoa图形

Objective c 使用CoreGraphics在我的自定义NSSlider中绘制错误的Cocoa图形,objective-c,cocoa,core-graphics,custom-controls,nsslider,Objective C,Cocoa,Core Graphics,Custom Controls,Nsslider,我必须重新设计一些控件。NSButton没有问题,但当我按住鼠标并四处移动旋钮时,NSSlider出现绘图错误。如果我松开鼠标,它将正确绘制 这是绘图代码(我的类继承自NSSlider): 我能做些什么来避免这种行为 参数定向 定义视图中需要重绘的部分的矩形。此矩形通常表示视图中需要更新的部分。启用响应滚动时,此矩形还可以表示AppKit要缓存的视图的不可见部分 您正在dirtyRect中绘制控件。您应该在self.bounds中绘制控件的(dirtyRect部分)。 阅读更多关于 参数定向

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

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

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

参数定向

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

您正在dirtyRect中绘制控件。您应该在self.bounds中绘制控件的(dirtyRect部分)。 阅读更多关于

参数定向

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

您正在dirtyRect中绘制控件。您应该在self.bounds中绘制控件的(dirtyRect部分)。 阅读更多关于

- (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));
}