2010-11-21 190 views
7

有沒有什麼辦法可以覆蓋NSScroller 而不是滾動視圖的內容(如在iOS中)?我已經嘗試過幾種方法:覆蓋內容NSScroller

一個)設置滾動視圖內容視圖(NSClipView)的框架延伸到卷軸

b)中添加NSScroller對象作爲的邊界滾動視圖(位於我想去的地方)

C)創建一個完全自定義的滾動視圖,並把它作爲一個子視圖的子視圖(這個工作,但是這將意味着我需要重寫NSScroller的所有功能)

Sparrow似乎成功地做到了這一點,它似乎通過一個常規的NSScroller子類來完成(看它響應在系統偏好設置>>外觀中設置的滾動設置)。這不是真正的卷軸問題,它只是讓它覆蓋內容。

任何建議表示讚賞:-)

回答

4

這裏是我的解決方案: 創建擴展NSScroller

在MyScroller.m一個MyScroller類:

#import "MyScroller.h" 


@implementation MyScroller 

+(CGFloat) scrollerWidth{ 
    return 10; 
} 

+(CGFloat) scrollerWidthForControlSize:(NSControlSize)controlSize{ 
    return 10; 
} 

- (void) drawBackground:(NSRect) rect{ 
    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:rect xRadius:0 yRadius:0]; 
    [[NSColor whiteColor] set]; 
    [path fill]; 
} 

- (void)drawKnob{ 
    [self drawBackground:[self rectForPart:0]]; 
    [self drawBackground:[self rectForPart:1]]; 
    [self drawBackground:[self rectForPart:2]]; 
    [self drawBackground:[self rectForPart:4]]; 
    [self drawBackground:[self rectForPart:5]]; 
    [self drawBackground:[self rectForPart:6]]; 


    NSRect knobRect = [self rectForPart:NSScrollerKnob]; 
    NSRect newRect = NSMakeRect((knobRect.size.width - [MyScroller scrollerWidth])/2, knobRect.origin.y, [MyScroller scrollerWidth], knobRect.size.height); 
    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:newRect xRadius:5 yRadius:5]; 
    [[NSColor grayColor] set]; 
    [path fill]; 
} 
@end 

然後,只需設置滾輪在Interface Builder中自定義類。

+0

有了這個解決方案有沒有辦法自動隱藏,通過對相關屬性的滾動條。 – loretoparisi 2012-03-12 23:49:24