我已经实现了一个自定义滑块单元,它可以使用滚动条和旋钮的图像进行绘制。现在唯一的障碍就是这个,当我快速拖动旋钮时,图像变得混乱。我发布了一个屏幕截图。
以下是代码:
#import "customSliderCell.h"
@implementation customSliderCell
- (void)drawKnob:(NSRect)knobRect {
NSImage * knob = knobImage;
[[self controlView] lockFocus];
[knob
compositeToPoint:NSMakePoint(knobRect.origin.x,knobRect.origin.y+knobRect.size.height)
operation:NSCompositeSourceOver];
[[self controlView] unlockFocus];
}
- (void)drawBarInside:(NSRect)rect flipped:(BOOL)flipped {
rect.size.height = 8;
NSRect leftRect = rect;
leftRect.origin.x=0;
leftRect.origin.y=2;
leftRect.size.width = knobrect.origin.x + (knobrect.size.width);
[leftBarImage setSize:leftRect.size];
[leftBarImage drawInRect:leftRect fromRect: NSZeroRect operation: NSCompositeSourceOver fraction:1];
NSRect rightRect = rect;
rightRect.origin.x=0;
rightRect.origin.y=2;
rightRect.origin.x = knobrect.origin.x;
[rightBarImage setSize:rightRect.size];
[rightBarImage drawInRect:rightRect fromRect: NSZeroRect operation: NSCompositeSourceOver fraction:1];
}
我很亲密啊。关于为什么会发生这种情况以及如何解决它的任何帮助将非常感谢,谢谢!
答案 0 :(得分:13)
好的,所以它已经弄清楚了。显然,滑块试图变得聪明,只能在旋钮的位置画画。所以显然我必须通过重写滑块类中的setNeedsDisplayInRect来使rect无效。
#import "customSlider.h"
@implementation customSlider
-(void)setNeedsDisplayInRect:(NSRect)invalidRect{
[super setNeedsDisplayInRect:[self bounds]];
}
@end
答案 1 :(得分:4)
我是Objective-c的初学者。 我也碰到了这个问题!这是找到我花了两天的解决方案))) 保存并恢复GraphicsState:
[NSGraphicsContext restoreGraphicsState];
//...
[leftBarImage drawInRect:leftRect fromRect: NSZeroRect operation: NSCompositeSourceOver fraction:1];
//...
[rightBarImage drawInRect:rightRect fromRect: NSZeroRect operation: NSCompositeSourceOver fraction:1];
[NSGraphicsContext saveGraphicsState];
抱歉英语不好。
答案 2 :(得分:2)
删除所有-lockFocus
和-unlockFocus
条消息。在-drawBarInside:flipped:
或-drawKnob:
发送之前,框架将负责为您设置绘图上下文。
此外,您不应该在draw方法中创建任何对象。
答案 3 :(得分:1)
以下是讨论和解决方案:http://www.cocoabuilder.com/archive/cocoa/177288-preventing-nsslider-bar-from-drawing.html,简而言之,您可以覆盖整个drawCell:inView:或使用覆盖私有方法的“脏黑客技巧”。我个人不喜欢黑客,但在这种情况下,我做了
- (BOOL)_usesCustomTrackImage {
return YES;
}
它解决了我的问题