【问题标题】:NSScrollView with fixed background texture具有固定背景纹理的 NSScrollView
【发布时间】:2016-09-20 10:14:12
【问题描述】:

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

我尝试了很多方法,但要么就是不管用,要么就是无法修复。

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

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

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

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

【问题讨论】:

  • 我实际上需要相反的背景来滚动视图,向下滚动时它确实保持固定。你知道我怎样才能让它双向滚动吗?

标签: objective-c macos cocoa nsscrollview


【解决方案1】:

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

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

【讨论】:

  • 我尝试让 NSScrollView 和 IKImageBrowserView 都透明,但它会导致伪影,看起来很糟糕,并导致黑色背景。
  • 您是否设置了背景视图?你看到了什么样的文物?
  • 我有一个背景视图。在非矩形图像的边缘周围,alpha 中没有渐变,(这不是图像的问题,就好像我设置了图像浏览器的背景一样,它不会发生),它只是非常锯齿状。跨度>
  • 似乎在不同的情况下设置文档视图的背景颜色会做不同的事情,有时它不会设置滚动视图反弹时看到的区域的背景颜色,有时它会.. .
  • 您尝试将您的图像设置为您的backgroundColorNSScrollView 对吗?
【解决方案2】:

终于把组合弄对了。

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

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

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      相关资源
      最近更新 更多