2010-11-21 37 views
7

Có cách nào để phủ lớp phủ NSScroller lên trên nội dung của chế độ xem cuộn (như trong iOS) không? Tôi đã thử nhiều phương pháp:Lớp phủ NSScroller qua nội dung

a) thiết lập các khung hình của Cảnh cuộn nội dung (NSClipView) để mở rộng vào bờ cõi của các cuộn

b) thêm một đối tượng NSScroller như một subview của chế độ xem cuộn (vị trí mà tôi muốn)

c) tạo chế độ xem cuộn hoàn toàn tùy chỉnh và đặt nó dưới dạng chế độ xem phụ (điều này có nghĩa là tôi cần viết lại tất cả chức năng của NSScroller)

Sparrow dường như thực hiện thành công việc này và dường như thực hiện điều đó thông qua lớp con NSScroller thông thường (xem nó phản hồi cài đặt cuộn được đặt trong Tùy chọn hệ thống >> Giao diện). Nó không thực sự vẽ scroller đó là vấn đề, nó chỉ làm cho nó che phủ nội dung.

Bất cứ lời khuyên được đánh giá cao :-)

Trả lời

4

Đây là giải pháp của tôi: Tạo một lớp MyScroller kéo dài NSScroller

Trong MyScroller.m:

#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 

Sau đó chỉ cần thiết lập các lớp tùy chỉnh cho Scroller trong Interface Builder.

+0

Với giải pháp này không có cách nào để tự động ẩn thanh cuộn thông qua thuộc tính liên quan. – loretoparisi

Các vấn đề liên quan