我正在使用NSScrollView
处理Mac应用程序,我希望NSScrollView
拥有自定义背景图片。我在自定义documentView NSView
子类中使用了此代码:
- (void)drawRect:(NSRect)rect {
[[NSColor colorWithPatternImage:[NSImage imageNamed:@"wood.jpg"]] set];
NSRectFill(rect);
}
显示图案图像作为documentView的背景。
但是现在在Mac OS X Lion中,当NSScrollView
滚动得更远时,{{1}}反弹,显示出丑陋的白色空间。如何让白色空间也被背景图像覆盖?
答案 0 :(得分:2)
使用滚动视图的drawRect:
方法,而不是覆盖setBackgroundColor:
,将您使用模式图像创建的NSColor传递。
答案 1 :(得分:1)
你应该使用NSScrollView setBackgroundColor子类,但是你应该像这样子类化NSClipView来将纹理原点固定到顶部:
@implementation MYClipView
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect
{
if (self.drawsBackground)
{
NSGraphicsContext* theContext = [NSGraphicsContext currentContext];
[theContext saveGraphicsState];
float xOffset = NSMinX([self convertRect:[self frame] toView:nil]);
float yOffset = NSMaxY([self convertRect:[self frame] toView:nil]);
[theContext setPatternPhase:NSMakePoint(xOffset, yOffset)];
NSColor* color = self.backgroundColor;
[color set];
NSRectFill([self bounds]);
[theContext restoreGraphicsState];
}
// Note: We don't call [super drawRect:dirtyRect] because we don't need it to draw over our background.
}
+ (void)replaceClipViewInScrollView:(NSScrollView*)scrollView
{
NSView* docView = [scrollView documentView]; //[[scrollView documentView] retain];
MYClipView* newClipView = nil;
newClipView = [[[self class] alloc] initWithFrame:[[scrollView contentView] frame]];
[newClipView setBackgroundColor:[[scrollView contentView] backgroundColor]];
[scrollView setContentView:(NSClipView*)newClipView]; [scrollView setDocumentView:docView];
// [newClipView release];
// [docView release];
}
@end
使用NSScrollView实例调用+ (void)replaceClipViewInScrollView:(NSScrollView*)scrollView
。
答案 2 :(得分:0)
将drawRect代码放在NSScrollView子类中。在IB中,更改NSScrollView以使用您的自定义子类而不是NSScrollView。另外,请确保在滚动视图的属性检查器中取消选中“绘制背景”。