代码之家  ›  专栏  ›  技术社区  ›  neoneye

如何填充nsScrollView的右下角?

  •  2
  • neoneye  · 技术社区  · 14 年前

    我想改变它的颜色,但我不确定它是nsscrollview还是nsclipview的子类。或者角可以作为常规nsview插入。

    我不需要密码。只是一个关于如何做的提示。

    Shows the white corner in a NSScrollView

    我不需要密码。只是一个如何做的提示。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Community CDub    7 年前

    已经 answered elsewhere on 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
    
        2
  •  0
  •   Austin    8 年前

    有点奇怪,但只是子类化nsscrollview和用super.drawrect()覆盖draw,使我的nsscrollview(不是)用白色填充那个角。我测试了2倍以确定,因为这没什么意义。

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

    以下是原始答案的快速变化:

    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()
            }
        }
    }