objective-c - 如何改变 NSScroller 的颜色?

标签 objective-c cocoa nsscroller

我正在尝试更改滚动条本身的颜色,似乎我需要覆盖 drawKnob 周围的某些内容,但我找不到任何看起来合适的方法。

我想到的一种方法是注入(inject)一种新样式并让滚动条使用它,但同样,我在 NSScroller header 中找不到任何有关 NSColor 的信息。

有什么想法吗?

最佳答案

无需从头开始重画。就这么简单:

import AppKit

class CyanideScroller: NSScroller {
    private var _bkgrColour: NSColor = NSColor.black
    private var _knobColour: NSColor = NSColor.white
    private var isHorizontal = false

    var bkgrColour: NSColor {
        get { return _bkgrColour}
        set { _bkgrColour = newValue}
    }

    var knobColour: NSColor {
        get { return _knobColour}
        set { _knobColour = newValue}
    }

    override var frame: CGRect {
        didSet {
            let size = frame.size
            isHorizontal = size.width > size.height
        }
    }

    override func draw(_ dirtyRect: NSRect) {
        _bkgrColour.setFill()
        dirtyRect.fill()
        self.drawKnob()
    }


    override func drawKnob() {
        _knobColour.setFill()

        let dx, dy: CGFloat
        if isHorizontal {
            dx = 0; dy = 3
        } else {
            dx = 3; dy = 0
        }

        let frame = rect(for: .knob).insetBy(dx: dx, dy: dy)
        NSBezierPath.init(roundedRect: frame, xRadius: 3, yRadius: 3).fill()
    }

}

关于objective-c - 如何改变 NSScroller 的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22622219/

相关文章:

objective-c - Cocoa 绑定(bind)到 NSTableView 选择

objective-c - 更改 NSScrollView 中 NSScroller 的高度

objective-c - 引用 Images.xcassets 文件夹中的图像

iphone - 在 NSArray 中搜索

ios - UISearchBar Minimal Style 在打字时使色调变黑

objective-c - 界面生成器 : How to load view from nib file

cocoa - 核心数据 SQLite 加密?

cocoa - 如何使 NSScroller 的旋钮轨道透明?

objective-c - 在 NSScrollView 问题中绘制自定义 NSScroller

iphone - 使用 iAd 的应用程序是否与旧版 iOS 兼容