1

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

我尝试了很多方法,但要么它们不起作用,要么它没有保持固定。

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

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

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

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

4

3 回答 3

2

如果你scrollView是全屏的,你可以把你的图像设置为你的背景self.view,然后设置你的scrollView透明背景。

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

于 2012-08-20T20:44:12.433 回答
1

终于把组合弄对了。

继承 NSScrollView 并在 drawRect 中绘制图案图像:

- (void)drawRect:(NSRect)rect {
    [[NSColor colorWithPatternImage:[NSImage imageNamed:@"linenTile"]] set];
    NSRectFill(rect);
}

将文档视图的背景设置为清除(对于像这样的 IKImageBrowserView):

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

并且必须取消选中滚动视图上界面生成器中的绘制背景复选框。或者在代码中将值设置为 NO。

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

于 2012-08-20T21:07:41.227 回答
0

子类化-drawRect:是不必要的,只需使用backgroundColorNSScrollView 的属性即可。文档说“这种颜色用于在内容视图内绘制文档视图未覆盖的区域。”

scollView.backgroundColor = [[NSColor colorWithPatternImage:[NSImage imageNamed:@"linenTile"]] set];
于 2016-09-20T02:14:12.107 回答