2010-11-15 58 views
3

我對NSScroller進行了子類化,試圖使它看起來像iOS上的「滾動條」的外觀。我希望它只是一個覆蓋層,代表在當前位置上繪製的位置。無論出於何種原因,如果我重寫scroller的drawRect,我會得到充滿白色的邊界。有沒有什麼辦法可以防止這種情況發生,因此我可以僅僅在我的NSScroller子類的基礎上進行繪製?如何繪製一個透明的NSScroller

編輯: 用清晰的顏色繪製似乎使我接近,但它畫的「太清楚」:P它正在繪製到桌面,當我只是想畫到窗口。這張圖可能會讓它更加清晰 alt text

任何想法?

回答

9

的NSView子類完成所有的圖紙開始的drawRect。如果在子類中重寫該方法,則需要負責完成所有繪圖(無論是通過自己的方法還是調用super的方法)。例如,以下代碼只繪製滾動nob,並使其餘部分滾動條的框架是透明的。

- (void)drawRect:(NSRect)dirtyRect { 

    // Do some custom drawing... 
    [[NSColor clearColor] set]; 
    NSRectFill(dirtyRect); 

    // Call NSScroller's drawKnob method (or your own if you overrode it) 
    [self drawKnob]; 
    } 

這是一個比一個實際的代碼的建議(不知道是什麼含義這樣做少量的圖紙對NSScroller)NSScroller也有其他具體的繪製方法可以覆蓋從/調用更多概念證明的一個重寫的drawRect:方法(可從信息蘋果的文檔:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSScroller_Class/Reference/Reference.html

+0

這讓我非常接近我正在尋找,但會「過猶不及」。看到我上面的編輯(圖片是與繪製旋鈕註釋幫助說明)。 – BarrettJ 2010-11-16 05:10:10

+0

找到我需要的顏色:[NSColor colorWithCalibratedWhite:0.13 alpha:0.855] – BarrettJ 2010-11-16 05:27:40

+0

謝謝。它有幫助。 :) – Sid 2014-01-10 09:55:54

0

如果您只是想繪製基類繪製的內容,請在執行自己的繪製之前調用[super drawRect:rect]

FWIW,我不確定你會通過在NSScroller的默認繪圖上繪製來獲得想要的效果。 iOS風格的滾動條是半透明的。如果你打電話給超級的drawRect:,你會看到藍色的滾動條,透過iOS風格的透明滾動條可以看到。你可能想要避免調用超級並且只是自己畫一切。

如果你想重用繪製NSScroller件呢,這個類提供了這樣做的方法很多,如drawKnobdrawArrow:highlight:

4

如果你把所有的東西,除了繪製旋鈕,你可以得到一個背景不太滾動...

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

儘管這篇文章已經過了幾年,但我只想提一下,這仍然適用於Swift(並且非常簡單)。 – Alex 2014-07-23 13:34:36

+0

@Alex這確實有效。但是,在用戶完成滾動後,這不會隱藏滾動條(即使通過觸控板連接)。 – Supertecnoboff 2017-10-09 10:34:55

4

另外,您可以使用RFOverlayScrollView,這是NSScroller的一個很好的子類,它既透明又自動隱藏;並根據MIT License發佈。

RFOverlayScrollView

RFOverlayScrollView是NSScrollView子類,顯示其NSScroller在IOS風格即使當鼠標連接。

enter image description here

+0

這是我正在尋找的完全一樣。謝謝您的幫助。你讓我今天一整天都感覺很好。謝謝先生。 :) – Sid 2013-11-18 08:19:54

+0

當我發現它時,我的反應就是這樣!不要忘了也要感謝作者;) – 2013-11-18 17:18:59

+0

夢幻般的課,完美的作品! (即使在macOS High Sierra - Xcode 9上)。 – Supertecnoboff 2017-10-09 10:33:48