我有一个IKImageBrowserView,它是NSScrollView的文档视图。如何设置背景图像(纹理),以便在用户滚动时背景保持固定。
我尝试了各种各样的事情,但要么它们不起作用,要么它们不会被修复。
我试过让IKImageBrowserView和NSScrollView透明,但是这不起作用,背景是黑色的。
我尝试添加纹理作为图片浏览器的背景图层:
NSColor* browserBackgroundColor = [NSColor colorWithPatternImage:[NSImage imageNamed:@"linenTile"]];
CALayer *layer = [CALayer layer];
[layer setBackgroundColor:[browserBackgroundColor CGColor]];
[self.imageBrowserView setBackgroundLayer:layer];
向下滚动时保持固定,但向上滚动时仍保持固定状态。这是我得到的最接近的。
答案 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];