У меня есть пользовательский NSWindow (BorderlessWindow.swift) и NSView (TransparentView.swift), и я добавляю метку (NSTextField) к TransparentView.Прозрачный фон NSWindow не был восстановлен
Когда я скрыть метку, то TransparentView не выздоровел:
Перед Скрыть захвата изображения:
После Скрыть захвата изображения:
Как может Я чиню это?
BorderlessWindow.swift
class BorderlessWindow: NSWindow {
override init(contentRect: NSRect, styleMask aStyle: Int, backing bufferingType: NSBackingStoreType, `defer` flag: Bool) {
super.init(contentRect: contentRect,
styleMask: NSBorderlessWindowMask,
backing: NSBackingStoreType.Buffered,
`defer`: false)
self.alphaValue = 1.0
self.opaque = false
self.movableByWindowBackground = true
}
@IBOutlet weak var testString: NSTextField!
@IBAction func clicked(sender: NSButton) {
if testString.hidden == false {
testString.hidden = true
}
else {
testString.hidden = false
}
}
override var canBecomeKeyWindow:Bool {
get {
return true
}
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
TransparentView.swift
class TransparentView: NSView {
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
NSColor.clearColor().set()
NSRectFill(self.bounds)
let path = NSBezierPath(roundedRect: self.bounds, xRadius: 10, yRadius: 10)
let path2 = NSBezierPath(roundedRect: NSMakeRect(self.bounds.origin.x + 10, self.bounds.origin.y + 10, self.bounds.size.width - 20, self.bounds.size.height - 20), xRadius: 10, yRadius: 10)
NSColor(calibratedRed: 1, green: 0.7, blue: 0, alpha: 0.5).setFill()
NSColor(calibratedRed: 1, green: 1, blue: 1, alpha: 1).setStroke()
path2.lineWidth = 3.0
path.lineJoinStyle = NSLineJoinStyle.RoundLineJoinStyle
path.lineCapStyle = NSLineCapStyle.RoundLineCapStyle
path2.fill()
path2.stroke()
// Drawing code here.
}
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
}
я нашел: Когда начальное значение TextField в скрытой собственности верно (текстовое поле инициализируется со скрытым состоянием) , он отлично работает.
Является ли текстовое поле сконфигурированным для рисования фона (что может быть четкого цвета)? Если да, то лучше ли это будет, если вы отключите это? Кроме того, ваш 'drawRect()' должен работать в терминах 'dirtyRect' или' self.bounds', а не 'self.frame'. –
текстовое поле настроено так, чтобы не рисовать его фон. и у меня все еще такая же проблема. Спасибо за ответ. – kingleo
Вы по-прежнему используете 'self.frame' для первого пути. Вы пытались вызвать 'self.invalidateShadow()' после переключения состояния 'hidden' текстового поля? –