在 NSButton 中绘制 NSString 时绘制工件
Drawing artifacts when drawing a NSString in a NSButton
我正在使用 drawRect
在自定义视图中绘制一个 NSString,它是 NSButton
的子视图。 NSButton 的 drawRect
也在绘制一个 NSImage
,这似乎是问题所在。如果我删除 NSImage
的 drawRect
代码,它就不会再发生(但那样我就没有背景了)。
这是自定义视图 drawRect
(缩写):
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
let string: NSString = NSString(string: thermostat.displayTargetTemperature())
string.drawAtPoint(NSMakePoint(CGFloat(width), CGFloat(y)), withAttributes: self.attributes)
}
这里是 NSButton
drawRect
:
override func drawRect(dirtyRect: NSRect) {
var image = NSImage(named: FILDarkManager.enabled ? "preferences-statusbar-bg-dark" : "preferences-statusbar-bg-light")
if (self.state == NSOnState) {
image?.drawInRect(dirtyRect, fromRect: NSZeroRect, operation: NSCompositingOperation.CompositeSourceOver, fraction: 1.0, respectFlipped: true, hints: nil)
}
else {
image?.drawInRect(dirtyRect, fromRect: NSZeroRect, operation: NSCompositingOperation.CompositeSourceOver, fraction: 0.8, respectFlipped: true, hints: nil)
}
super.drawRect(dirtyRect)
}
可能是画NSImage
时的操作有关?
奇怪的是,如果我将鼠标悬停在视图上,它会正确绘制。
尝试将图像绘制到 [self bounds] 而不是 dirtyRect。
绘制字符串可能会弄脏按钮的一部分,导致您的代码将图像绘制到那个 dirtyRect 中。
我正在使用 drawRect
在自定义视图中绘制一个 NSString,它是 NSButton
的子视图。 NSButton 的 drawRect
也在绘制一个 NSImage
,这似乎是问题所在。如果我删除 NSImage
的 drawRect
代码,它就不会再发生(但那样我就没有背景了)。
这是自定义视图 drawRect
(缩写):
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
let string: NSString = NSString(string: thermostat.displayTargetTemperature())
string.drawAtPoint(NSMakePoint(CGFloat(width), CGFloat(y)), withAttributes: self.attributes)
}
这里是 NSButton
drawRect
:
override func drawRect(dirtyRect: NSRect) {
var image = NSImage(named: FILDarkManager.enabled ? "preferences-statusbar-bg-dark" : "preferences-statusbar-bg-light")
if (self.state == NSOnState) {
image?.drawInRect(dirtyRect, fromRect: NSZeroRect, operation: NSCompositingOperation.CompositeSourceOver, fraction: 1.0, respectFlipped: true, hints: nil)
}
else {
image?.drawInRect(dirtyRect, fromRect: NSZeroRect, operation: NSCompositingOperation.CompositeSourceOver, fraction: 0.8, respectFlipped: true, hints: nil)
}
super.drawRect(dirtyRect)
}
可能是画NSImage
时的操作有关?
奇怪的是,如果我将鼠标悬停在视图上,它会正确绘制。
尝试将图像绘制到 [self bounds] 而不是 dirtyRect。
绘制字符串可能会弄脏按钮的一部分,导致您的代码将图像绘制到那个 dirtyRect 中。