gpt4 book ai didi

objective-c - 在我的自定义 NSSlider 中使用 CoreGraphics 进行 Cocoa 绘图时出现错误

转载 作者:行者123 更新时间:2023-12-03 17:38:09 26 4
gpt4 key购买 nike

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

NSSlider while moving around

这是绘图代码(我的类继承自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));
}

我该怎么做才能避免这种行为?

最佳答案

parameter dirtyRect

A rectangle defining the portion of the view that requires redrawing. This rectangle usually represents the portion of the view that requires updating. When responsive scrolling is enabled, this rectangle can also represent a nonvisible portion of the view that AppKit wants to cache.

您正在 dirtyRect 中绘制控件。您应该在 self.bounds 中绘制控件(的 dirtyRect 部分)。阅读更多内容documentation of drawRect:

关于objective-c - 在我的自定义 NSSlider 中使用 CoreGraphics 进行 Cocoa 绘图时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34975639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com