我试图改变卷轴本身的颜色,似乎我需要覆盖drawKnob周围的东西,但我找不到任何看似合适的方法。
我想到的一种方法是注入一个新的样式并让滚动条使用它但是再一次,我在NSScroller标题中找不到任何关于NSColor的东西。
有什么想法吗?
答案 0 :(得分:1)
我认为您必须编写一个子类,并覆盖drawKnob
,也许drawKnobSlotInRect:
,这取决于您想要更改的内容。
答案 1 :(得分:1)
无需重新绘制。就这么简单:
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()
}
}