Я создал значок в PaintCode , который рисуется программно (но этот вопрос не обязательно относится к этому инструменту), и я пытаюсь перерисовать этот значок.
Я использую пользовательский класс, подобный этому:
class IconTabGeneral: NSView {
override func draw(_ dirtyRect: NSRect) {
StyleKitMac.drawTabGeneral()
}
}
drawTabGeneral()
- это метод в классе StyleKitMac
(сгенерированный PaintCode), который выглядит следующим образом (я опущу все детали bezierPath
):
@objc dynamic public class func drawTabGeneral(frame targetFrame: NSRect = NSRect(x: 0, y: 0, width: 22, height: 22), resizing: ResizingBehavior = .aspectFit) {
//// General Declarations
let context = NSGraphicsContext.current!.cgContext
//// Resize to Target Frame
NSGraphicsContext.saveGraphicsState()
let resizedFrame: NSRect = resizing.apply(rect: NSRect(x: 0, y: 0, width: 22, height: 22), target: targetFrame)
context.translateBy(x: resizedFrame.minX, y: resizedFrame.minY)
context.scaleBy(x: resizedFrame.width / 22, y: resizedFrame.height / 22)
//// Bezier Drawing
let bezierPath = NSBezierPath()
...
bezierPath.close()
StyleKitMac.accentColor.setFill() ⬅️Custom color set here
bezierPath.fill()
NSGraphicsContext.restoreGraphicsState()
}
Определяемое accentColor
значение есть настройка, которая может быть изменена пользователем. Я не могу перерисовать свой экземпляр IconTabGeneral
, чтобы подобрать новый цвет после того, как пользователь изменил его.
Я попробовал это без удачи:
iconGeneralTabInstance.needsDisplay = true
Насколько я понимаю, needsDisplay
заставит функцию draw
снова сработать, но, очевидно, нет.
Есть идеи, как заставить этот значок перерисовать и заново заполнить его bezierPath
?