【问题标题】:Drawing artifacts when drawing a NSString in a NSButton在 NSButton 中绘制 NSString 时绘制工件
【发布时间】:2015-02-02 13:39:28
【问题描述】:

我正在使用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)

}

这里是NSButtondrawRect:

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时的操作有关?

奇怪的是,如果我将鼠标悬停在视图上,它会正确绘制。

【问题讨论】:

    标签: cocoa nsstring drawrect nsimage nsbutton


    【解决方案1】:

    尝试将图像绘制到 [self bounds] 而不是dirtyRect。

    绘制字符串可能会弄脏按钮的一部分,导致代码将图像绘制到该dirtyRect中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      相关资源
      最近更新 更多