7

NSScrollerスクロール ビューのコンテンツにオーバーレイする方法はありますか (iOS のように)? 私はすでにいくつかのアプローチを試しました:

a)スクロール ビュー コンテンツ ビュー (NSClipView) のフレームを設定して、スクローラーの境界内に拡張する

b) NSScroller オブジェクトをスクロール ビューのサブビューとして追加する (必要な場所に配置する)

c)完全にカスタムのスクローラービューを作成し、それをサブビューとして配置します(これは機能しましたが、NSScrollerのすべての機能を書き直す必要があることを意味します)

Sparrowはこれをうまく行っているようで、通常の NSScroller サブクラスを介してそれを行っているようです (システム環境設定 >> 外観で設定されたスクロール設定に応答するように見えます)。問題はスクローラーを実際に描画することではなく、コンテンツをオーバーレイするだけです。

どんなアドバイスでも大歓迎です:-)

4

3 に答える 3

7

ここで、スクロールバーのカスタム クラスを設定できます。

その後、 の -tileメソッドをオーバーライドすることでNSScrollView、それらを適切に配置できます。

于 2010-11-21T11:30:21.873 に答える
4

これが私の解決策です: NSScroller を拡張する MyScroller クラスを作成します

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

次に、Interface Builder で Scroller のカスタム クラスを設定するだけです。

于 2011-02-18T10:57:26.373 に答える
0

私は最近、あなたの問題を解決するはずのRFOverlayScrollViewをリリースしました:

ソース:https ://github.com/rheinfabrik/RFOverlayScrollView

ブログ投稿: http: //blog.rheinfabrik.de/blog/2013/01/01/introducing-rfoverlayscrollview/

于 2013-01-07T08:50:14.083 に答える