NSScrollView具有固定的背景纹理

时间:2012-08-20 20:19:07

标签: objective-c macos cocoa nsscrollview

我有一个IKImageBrowserView,它是NSScrollView的文档视图。如何设置背景图像(纹理),以便在用户滚动时背景保持固定。

我尝试了各种各样的事情,但要么它们不起作用,要么它们不会被修复。

我试过让IKImageBrowserView和NSScrollView透明,但是这不起作用,背景是黑色的。

我尝试添加纹理作为图片浏览器的背景图层:

NSColor* browserBackgroundColor = [NSColor colorWithPatternImage:[NSImage imageNamed:@"linenTile"]];
CALayer *layer = [CALayer layer];
[layer setBackgroundColor:[browserBackgroundColor CGColor]];
[self.imageBrowserView setBackgroundLayer:layer];

向下滚动时保持固定,但向上滚动时仍保持固定状态。这是我得到的最接近的。

3 个答案:

答案 0 :(得分:2)

如果您的scrollView是全屏,则可以将图片设置为self.view的背景,然后将scrollView的背景设置为透明。

或者您可以在NSView下方添加单独的scrollView,使其覆盖与scrollView相同的区域,并设置其背景。

答案 1 :(得分:1)

最后得到了正确的组合。

子类NSScrollView并在drawRect:

中绘制模式图像
- (void)drawRect:(NSRect)rect {
    [[NSColor colorWithPatternImage:[NSImage imageNamed:@"linenTile"]] set];
    NSRectFill(rect);
}

将文档视图的背景设置为clear(对于IKImageBrowserView,如下所示):

[self.imageBrowserView setValue:[NSColor clearColor] forKey:IKImageBrowserBackgroundColorKey];

还必须取消选中滚动视图中界面构建器中的“绘制背景”复选框。或者在代码中将值设置为NO。

如果您希望模式与内容一起滚动。不要将NSScrollView子类化,只需将scrollview的背景颜色设置为模式,并将文档视图的背景颜色设置为清除。

答案 2 :(得分:0)

子类化和-drawRect:是不必要的,只需使用NSScrollView的backgroundColor属性即可。 docs说"此颜色用于绘制内容视图中未被文档视图覆盖的区域。"

scollView.backgroundColor = [[NSColor colorWithPatternImage:[NSImage imageNamed:@"linenTile"]] set];