2015-02-02 2 views
0

Я использую drawRect, чтобы нарисовать NSString внутри пользовательского представления, которое является подзоном NSButton. drawRect NSButton также рисует NSImage, что представляется проблемой. Если я удалю код drawRect для NSImage, его больше не будет (но тогда у меня нет фона).Рисование артефактов при рисовании NSString в NSButton

Вот пользовательский вид 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?

Странно то, что если я навижу над видом, он рисует правильно.

Screenshot

ответ

1

Попробуйте нарисовать изображение в [самоуправления границ], а не в dirtyRect.

Рисование строки, вероятно, частички вашей кнопки, что приводит к тому, что ваш код рисует изображение в этот грязный реестр.

Смежные вопросы