2

色を変更したいのですが、NSScrollViewとNSClipViewのどちらをサブクラス化するかわかりません。または、コーナーを通常のNSViewとして挿入できる場合。

NSScrollViewに白いコーナーを表示します
(ソース:flickr.com

コードは必要ありません。それを行う方法のヒント。

4

3 に答える 3

1

mekentosjによるstackoverflowですでに他の場所で回答されています。サブクラスのクラスはNSScrollViewです。

@interface MyScrollView : NSScrollView {
}
@end


@implementation MyScrollView

- (void)drawRect:(NSRect)rect{
    [super drawRect: rect];

    if([self hasVerticalScroller] && [self hasHorizontalScroller]){
        NSRect vframe = [[self verticalScroller]frame];
        NSRect hframe = [[self horizontalScroller]frame];
        NSRect corner;
        corner.origin.x = NSMaxX(hframe);
        corner.origin.y = NSMinY(hframe);
        corner.size.width = NSWidth(vframe);
        corner.size.height = NSHeight(hframe);

        // your custom drawing in the corner rect here
        [[NSColor redColor] set];
        NSRectFill(corner);
    }
}
@end
于 2010-08-05T10:10:21.947 に答える
0

ちょっと奇妙ですが、NSScrollViewをサブクラス化し、super.drawRect()で描画をオーバーライドすると、NSScrollView(ではない)がその隅を白で塗りつぶしました。あまり意味がないので、確認のために2回テストしました。

import Cocoa

class ThemedScrollView: NSScrollView {
    override func drawRect(dirtyRect: NSRect) {
        super.drawRect(dirtyRect)
    }
}

これは、元の回答のSwiftバリエーションでもあります。

import Cocoa

class ThemedScrollView: NSScrollView {

    override func drawRect(dirtyRect: NSRect) {
        super.drawRect(dirtyRect)

        if hasVerticalScroller && hasHorizontalScroller {
            guard verticalScroller != nil && horizontalScroller != nil else { return }

            let vFrame = verticalScroller!.frame
            let hFrame = horizontalScroller!.frame
            let square = NSRect(origin: CGPoint(x: hFrame.maxX, y: vFrame.maxY), size: CGSize(width: vFrame.width, height: hFrame.height))

            let path = NSBezierPath(rect: square)
            let fillColor = NSColor.redColor()
            fillColor.set()
            path.fill()
        }
    }
}
于 2016-05-13T01:38:55.660 に答える
0

オースティンの回答のSwift5.2バージョンを更新

class Themed: NSScrollView {

    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)

        if hasVerticalScroller && hasHorizontalScroller {
            guard verticalScroller != nil && horizontalScroller != nil else { return }

            let vFrame = verticalScroller!.frame
            let hFrame = horizontalScroller!.frame
            let square = NSRect(origin: CGPoint(x: hFrame.maxX, y: vFrame.maxY), size: CGSize(width: vFrame.width, height: hFrame.height))

            let path = NSBezierPath(rect: square)
            let fillColor = NSColor.red
            fillColor.set()
            path.fill()
        }
    }
}

于 2020-05-07T15:41:31.827 に答える