NSScrollview和透明,覆盖NSScroller子类

时间:2011-03-09 20:32:47

标签: cocoa transparency drawrect nsscrollview nsscroller

我制作了一个光滑的NSScroller子类,但无法弄清楚如何将其覆盖在NSScrollView之上,而不是将documentView推到一边。

enter image description here

在这里,您可以看到我希望100%宽的NSCollectionView的背景,并让卷轴位于顶部。目前,我必须为滚动条设置白色背景,因为使用clearColor进行绘制时不会显示为透明,而是显示为黑色。

我是以错误的方式来做这件事的吗?我错过了一些明显的东西吗?如何实现位于NSScroller内容之上的透明跟踪NSScrollView的行为?

3 个答案:

答案 0 :(得分:9)

我能够通过在子类 OF NSSCROLLVIEW

中实现tile来获得定位
- (void)tile {
    [super tile];
    [[self contentView] setFrame:[self bounds]];
}

事实证明,尝试绘制清晰的颜色是问题的开始。在滚动子类中,我只是完全忽略了与滑块轨道有关的任何绘图通过对NSSCROLLER子类的过度DRAWRECT:,如此:

- (void)drawRect:(NSRect)dirtyRect
{
    [self drawKnob];
}

enter image description here

答案 1 :(得分:1)

请注意,要使其正常工作,您必须为scrollView启用图层支持!

即,致电:

[scrollViewInstance setWantsLayer:YES];

或在Interface Builder中设置。

如果你不这样做,scrollView的contentView将绘制滚动条的ON TOP。另外:你应该知道你正在做的事情本质上是两个NSView重叠(NSScrolller在NSScrollView之上---都是从NSView继承的。)与iOS上的UIViews不同,OS X上的重叠NSViews不受任何当前版本的正式支持操作系统(10.6下降)。启用CALayers似乎可以使它工作,但它仍然需要牢记。当然,打开图层会严重影响绘图性能。

有关详细信息,请参阅此SO问题:Is there a proper way to handle overlapping NSView siblings?

答案 2 :(得分:-1)

这种颜色是什么:[NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:0.0] 我认为你必须使用界面构建器修改大小。