2011-03-09 85 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