Objective c 具有固定背景纹理的NSScrollView

Objective c 具有固定背景纹理的NSScrollView,objective-c,macos,cocoa,nsscrollview,Objective C,Macos,Cocoa,Nsscrollview,我有一个iImageBrowserView,它是NSScrollView的文档视图。如何设置背景图像(纹理),以便用户滚动时背景保持不变 我试过很多方法,但要么就是不管用,要么就是不能固定 我已经尝试使IKImageBrowserView和NSScrollView透明,但这不起作用,背景是黑色的 我已尝试将纹理添加为图像浏览器的背景层: NSColor* browserBackgroundColor = [NSColor colorWithPatternImage:[NSImage imageN

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

我试过很多方法,但要么就是不管用,要么就是不能固定

我已经尝试使IKImageBrowserView和NSScrollView透明,但这不起作用,背景是黑色的

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

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

向下滚动时它保持不变,但向上滚动时它保持不变。这是我得到的最接近的图像。

如果您的
滚动视图是全屏的,您可以将您的图像设置为
自我视图的背景,然后将
滚动视图的背景设置为透明


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

最终获得了正确的组合

子类NSScrollView并在drawRect中绘制图案图像:

- (void)drawRect:(NSRect)rect {
    [[NSColor colorWithPatternImage:[NSImage imageNamed:@"linenTile"]] set];
    NSRectFill(rect);
}
将文档视图的背景设置为清除(对于像这样的IKImageBrowserView):

此外,还必须取消选中滚动视图上interface builder中的“绘制背景”复选框。或者在代码中将该值设置为“否”


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

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


我已经尝试使NSScrollView和IKImageBrowserView都透明,但它会导致瑕疵,看起来非常糟糕,并导致黑色背景。是否设置了背景视图?你看到了什么样的人工制品?我有一个背景视图。在非矩形图像的边缘周围,alpha中没有渐变(这不是图像的问题,就像我设置了图像浏览器的背景一样,它不会发生),只是非常参差不齐。似乎在不同的情况下,设置文档视图的背景色做了不同的事情,有时它不会设置滚动视图反弹时所看到区域的背景色,有时它会设置…您尝试将图像设置为
NSScrollView的
backgroundColor
,对吗?我实际上需要相反的背景,背景随视图滚动,向下滚动时它确实保持不变。你知道我怎样才能使它双向滚动吗?
[self.imageBrowserView setValue:[NSColor clearColor] forKey:IKImageBrowserBackgroundColorKey];
scollView.backgroundColor = [[NSColor colorWithPatternImage:[NSImage imageNamed:@"linenTile"]] set];