2011-03-09 55 views
8

我做了一个光滑的NSScroller子类,但不知道如何使它重叠在NSScrollView的顶部,而不是推到一边documentViewNSScrollview和透明,覆盖NSScroller子类

enter image description here

在这里你可以看到一个NSCollectionView,我希望做宽100%的背景下,具有沿顶部的滚动坐。目前,我必须为滚动条设置一个白色背景,因为使用clearColor进行的绘制不显示为透明,而是显示为黑色。

我该怎么做呢?我在这里错过了很明显的东西吗我如何才能实现位于NSScrollView的内容顶部的透明跟踪NSScroller的行为?

回答

8

我能够在NSSCROLLVIEW

- (void)tile { 
    [super tile]; 
    [[self contentView] setFrame:[self bounds]]; 
} 

的子类实现tile获得定位和事实证明,试图画出清晰的彩色是开始的问题。在滚轮子,我只是省略了与滑块轨道做完全通过重写DRAWRECT:的NSSCROLLER子类的,像这样的任何图纸:

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

enter image description here

+1

感谢您提及摆脱与轨道相关的绘图!我试图把它设置成一个清晰的颜色,但它搞乱了一切。删除它,一切都很好!谢谢! – 2011-06-24 00:28:04

-1

这是什么颜色:[NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:0.0] 我认为你必须修改界面生成器的大小。

+0

clearColor是一样的。问题不在于大小,而在于NSScroller的行为。标准的行为是将内容推到一边并绘制条形图,我希望内容不会被推到一边,并且要在顶部绘制条形图。 – coneybeare 2011-03-09 20:46:53

1

请注意,这个工作正确地说,你必须为scrollView启用图层支持!

也就是说,拨打:

[scrollViewInstance setWantsLayer:YES]; 

或将其设置在Interface Builder。

如果你不这样做,scrollView的contentView将绘制ON TOP的滚动条。另外:你应该知道你在做什么基本上与两个NSViews重叠(在NSScrollView之上的NSScroller ---都是从NSView继承而来)。与iOS上的UIViews不同,OS X上的重叠的NSViews不被任何当前版本官方支持的操作系统(10.6下降)。打开CALayers似乎可以使其工作,但它仍然值得铭记。当然,打开图层会严重影响绘图性能。

更多细节请参阅本SO问题:Is there a proper way to handle overlapping NSView siblings?

+0

这解决了我使用自己的透明滚动条时遇到的一个奇怪问题:它在第一次出现时会闪烁白色,然后在一两秒钟后正确绘制。 – robotspacer 2013-03-08 22:36:17